@amboss/design-system 1.13.4 → 1.13.6

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.
Files changed (34) hide show
  1. package/build/cjs/build-tokens/_zindex.json.js +10 -0
  2. package/build/cjs/build-tokens/visualConfig.js +150 -4
  3. package/build/cjs/scss/themes/dark.scss +5 -4
  4. package/build/cjs/scss/themes/light.scss +3 -2
  5. package/build/cjs/src/components/Button/Button.js +18 -32
  6. package/build/cjs/src/components/Link/Link.js +5 -4
  7. package/build/cjs/src/components/Tooltip/Tooltip.js +275 -0
  8. package/build/cjs/src/components/Tooltip/utils.js +81 -0
  9. package/build/cjs/src/index.js +2 -0
  10. package/build/esm/build-tokens/_subThemeType.d.ts +1 -1
  11. package/build/esm/build-tokens/_zindex.json.js +4 -0
  12. package/build/esm/build-tokens/_zindex.json.js.map +1 -0
  13. package/build/esm/build-tokens/visualConfig.d.ts +74 -0
  14. package/build/esm/build-tokens/visualConfig.js +150 -4
  15. package/build/esm/build-tokens/visualConfig.js.map +1 -1
  16. package/build/esm/scss/themes/dark.scss +5 -4
  17. package/build/esm/scss/themes/light.scss +3 -2
  18. package/build/esm/src/components/Button/Button.d.ts +0 -1
  19. package/build/esm/src/components/Button/Button.js +18 -32
  20. package/build/esm/src/components/Button/Button.js.map +1 -1
  21. package/build/esm/src/components/Link/Link.d.ts +4 -5
  22. package/build/esm/src/components/Link/Link.js +5 -4
  23. package/build/esm/src/components/Link/Link.js.map +1 -1
  24. package/build/esm/src/components/Tooltip/Tooltip.d.ts +23 -0
  25. package/build/esm/src/components/Tooltip/Tooltip.js +269 -0
  26. package/build/esm/src/components/Tooltip/Tooltip.js.map +1 -0
  27. package/build/esm/src/components/Tooltip/utils.d.ts +11 -0
  28. package/build/esm/src/components/Tooltip/utils.js +75 -0
  29. package/build/esm/src/components/Tooltip/utils.js.map +1 -0
  30. package/build/esm/src/index.d.ts +1 -0
  31. package/build/esm/src/index.js +1 -0
  32. package/build/esm/src/index.js.map +1 -1
  33. package/package.json +2 -1
  34. package/build/esm/src/components/Button/mock.d.ts +0 -326
@@ -0,0 +1,269 @@
1
+ import _styled from '@emotion/styled/base';
2
+ import React, { useMemo, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
3
+ import { keyframes } from '@emotion/react';
4
+ import { createPortal } from 'react-dom';
5
+ import { useDocument } from '../../shared/useDocument.js';
6
+ import { useWindow } from '../../shared/useWindow.js';
7
+ import { SubThemeProvider } from '../SubThemeProvider/SubThemeProvider.js';
8
+ import { Text } from '../Typography/Text/Text.js';
9
+ import zIndices from '../../../build-tokens/_zindex.json.js';
10
+ import { ARROW_SIZE, ARROW_OFFSET, getTooltipPosition, ANIMATION_DISTANCE } from './utils.js';
11
+
12
+ const ANIMATION_DURATION = 200;
13
+ const SHOW_HIDE_DELAY = 200;
14
+ const StyledContainer = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "production" ? {
15
+ target: "e2kei841"
16
+ } : {
17
+ target: "e2kei841",
18
+ label: "StyledContainer"
19
+ })(_ref => {
20
+ let {
21
+ theme,
22
+ horizontalPlacement,
23
+ verticalPlacement
24
+ } = _ref;
25
+ const animationDistance = verticalPlacement === "top" ? `${ANIMATION_DISTANCE}px` : `-${ANIMATION_DISTANCE}px`;
26
+ const animation = keyframes({
27
+ to: {
28
+ opacity: 1,
29
+ transform: horizontalPlacement === "center" ? `translate(-50%, ${animationDistance})` : `translateY(${animationDistance})`
30
+ }
31
+ });
32
+ return {
33
+ position: "absolute",
34
+ zIndex: zIndices.tooltip.value,
35
+ opacity: 0,
36
+ animation: `${ANIMATION_DURATION}ms ease-out forwards ${animation}`,
37
+ borderRadius: theme.variables.size.borderRadius.xs,
38
+ backgroundColor: theme.values.color.background.primary.default,
39
+ maxWidth: "224px",
40
+ boxSizing: "border-box",
41
+ padding: `${theme.variables.size.spacing.xs} ${theme.variables.size.spacing.s}`,
42
+ ...(horizontalPlacement === "center" && {
43
+ transform: "translate(-50%)"
44
+ })
45
+ };
46
+ }, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvb2x0aXAudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlFd0IiLCJmaWxlIjoiVG9vbHRpcC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICBNdXRhYmxlUmVmT2JqZWN0LFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyB1c2VEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdXNlRG9jdW1lbnRcIjtcbmltcG9ydCB7IHVzZVdpbmRvdyB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdXNlV2luZG93XCI7XG5pbXBvcnQgeyBTdWJUaGVtZVByb3ZpZGVyIH0gZnJvbSBcIi4uL1N1YlRoZW1lUHJvdmlkZXIvU3ViVGhlbWVQcm92aWRlclwiO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gXCIuLi9UeXBvZ3JhcGh5L1RleHQvVGV4dFwiO1xuaW1wb3J0IHpJbmRpY2VzIGZyb20gXCIuLi8uLi8uLi9idWlsZC10b2tlbnMvX3ppbmRleC5qc29uXCI7XG5cbmltcG9ydCB7XG4gIEFSUk9XX1NJWkUsXG4gIEFSUk9XX09GRlNFVCxcbiAgQU5JTUFUSU9OX0RJU1RBTkNFLFxuICBnZXRUb29sdGlwUG9zaXRpb24sXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIEJhc2VQcm9wcyA9IHtcbiAgLyogVG9vbHRpcCBjb250ZW50ICovXG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgLyogUGxhY2VtZW50ICovXG4gIHBsYWNlbWVudD86XG4gICAgfCBcImF1dG9cIlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJ0b3AtbGVmdFwiXG4gICAgfCBcInRvcC1yaWdodFwiXG4gICAgfCBcImJvdHRvbS1sZWZ0XCJcbiAgICB8IFwiYm90dG9tLXJpZ2h0XCI7XG4gIC8qIEN1c3RvbSBwb3J0YWwgY29udGFpbmVyIHRvIHJlbmRlciB0b29sdGlwIGludG8gKi9cbiAgcG9ydGFsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG4gIFwiZGF0YS1lMmUtdGVzdC1pZFwiPzogc3RyaW5nO1xuICAvKiBDYWxsZWQgd2hlbiB0b29sdGlwIGFwcGVhcnMgYW5kIGRpc2FwcGVhcnMgKi9cbiAgb25WaXNpYmlsaXR5Q2hhbmdlPzogKGlzVmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmRpdGlvbmFsUHJvcHMgPVxuICB8IHtcbiAgICAgIGV4dGVybmFsVHJpZ2dlclJlZj86IG5ldmVyO1xuICAgICAgLyogVHJpZ2dlciBlbGVtZW50IC0gd3JhcCB0cmlnZ2VyIGVsZW1lbnQgd2l0aGluIFRvb2x0aXAgLSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdHJpZ2dlciBwcm9wICovXG4gICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIH1cbiAgfCB7XG4gICAgICBjaGlsZHJlbj86IG5ldmVyO1xuICAgICAgLyogVHJpZ2dlciBlbGVtZW50IHJlZiAtIHBhc3MgaW4gYW4gZXh0ZXJuYWwgdHJpZ2dlciBlbGVtZW50ICovXG4gICAgICBleHRlcm5hbFRyaWdnZXJSZWY6IE11dGFibGVSZWZPYmplY3Q8YW55PjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBUb29sdGlwUHJvcHMgPSBCYXNlUHJvcHMgJiBDb25kaXRpb25hbFByb3BzO1xuXG5leHBvcnQgdHlwZSBUb29sdGlwUG9zaXRpb24gPSB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIGhvcml6b250YWxQbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBTdHlsZWRDb250YWluZXJQcm9wcyA9IHtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFBvc2l0aW9uW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFRvb2x0aXBQb3NpdGlvbltcInZlcnRpY2FsUGxhY2VtZW50XCJdO1xufTtcblxuY29uc3QgQU5JTUFUSU9OX0RVUkFUSU9OID0gMjAwO1xuY29uc3QgU0hPV19ISURFX0RFTEFZID0gMjAwO1xuXG5jb25zdCBTdHlsZWRDb250YWluZXIgPSBzdHlsZWQuZGl2PFN0eWxlZENvbnRhaW5lclByb3BzPihcbiAgKHsgdGhlbWUsIGhvcml6b250YWxQbGFjZW1lbnQsIHZlcnRpY2FsUGxhY2VtZW50IH0pID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25EaXN0YW5jZSA9XG4gICAgICB2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIlxuICAgICAgICA/IGAke0FOSU1BVElPTl9ESVNUQU5DRX1weGBcbiAgICAgICAgOiBgLSR7QU5JTUFUSU9OX0RJU1RBTkNFfXB4YDtcbiAgICBjb25zdCBhbmltYXRpb24gPSBrZXlmcmFtZXMoe1xuICAgICAgdG86IHtcbiAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCJcbiAgICAgICAgICAgID8gYHRyYW5zbGF0ZSgtNTAlLCAke2FuaW1hdGlvbkRpc3RhbmNlfSlgXG4gICAgICAgICAgICA6IGB0cmFuc2xhdGVZKCR7YW5pbWF0aW9uRGlzdGFuY2V9KWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IHpJbmRpY2VzLnRvb2x0aXAudmFsdWUsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgYW5pbWF0aW9uOiBgJHtBTklNQVRJT05fRFVSQVRJT059bXMgZWFzZS1vdXQgZm9yd2FyZHMgJHthbmltYXRpb259YCxcbiAgICAgIGJvcmRlclJhZGl1czogdGhlbWUudmFyaWFibGVzLnNpemUuYm9yZGVyUmFkaXVzLnhzLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHQsXG4gICAgICBtYXhXaWR0aDogXCIyMjRweFwiLFxuICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgIHBhZGRpbmc6IGAke3RoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcueHN9ICR7dGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy5zfWAsXG5cbiAgICAgIC4uLihob3Jpem9udGFsUGxhY2VtZW50ID09PSBcImNlbnRlclwiICYmIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTAlKVwiLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuKTtcblxudHlwZSBTdHlsZWRBcnJvd1Byb3BzID0ge1xuICB2ZXJ0aWNhbFBsYWNlbWVudDogVG9vbHRpcFBvc2l0aW9uW1widmVydGljYWxQbGFjZW1lbnRcIl07XG4gIGhvcml6b250YWxQbGFjZW1lbnQ6IFRvb2x0aXBQb3NpdGlvbltcImhvcml6b250YWxQbGFjZW1lbnRcIl07XG59O1xuXG5jb25zdCBTdHlsZWRBcnJvdyA9IHN0eWxlZC5kaXY8U3R5bGVkQXJyb3dQcm9wcz4oXG4gICh7IHRoZW1lLCB2ZXJ0aWNhbFBsYWNlbWVudCwgaG9yaXpvbnRhbFBsYWNlbWVudCB9KSA9PiAoe1xuICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIGJvcmRlckxlZnQ6IGAke0FSUk9XX1NJWkV9cHggc29saWQgdHJhbnNwYXJlbnRgLFxuICAgIGJvcmRlclJpZ2h0OiBgJHtBUlJPV19TSVpFfXB4IHNvbGlkIHRyYW5zcGFyZW50YCxcblxuICAgIC4uLih2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIiAmJiB7XG4gICAgICB0b3A6IFwiMTAwJVwiLFxuICAgICAgYm9yZGVyVG9wOiBgJHtBUlJPV19TSVpFfXB4IHNvbGlkICR7dGhlbWUudmFsdWVzLmNvbG9yLmJhY2tncm91bmQucHJpbWFyeS5kZWZhdWx0fWAsXG4gICAgfSksXG5cbiAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwiYm90dG9tXCIgJiYge1xuICAgICAgdG9wOiBgLSR7QVJST1dfU0laRX1weGAsXG4gICAgICBib3JkZXJCb3R0b206IGAke0FSUk9XX1NJWkV9cHggc29saWQgJHt0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHR9YCxcbiAgICB9KSxcblxuICAgIC4uLihob3Jpem9udGFsUGxhY2VtZW50ID09PSBcImNlbnRlclwiICYmIHtcbiAgICAgIGxlZnQ6IFwiNTAlXCIsXG4gICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgfSksXG5cbiAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJyaWdodFwiICYmIHtcbiAgICAgIGxlZnQ6IGAke0FSUk9XX09GRlNFVH1weGAsXG4gICAgfSksXG5cbiAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJsZWZ0XCIgJiYge1xuICAgICAgcmlnaHQ6IGAke0FSUk9XX09GRlNFVH1weGAsXG4gICAgfSksXG4gIH0pXG4pO1xuXG5jb25zdCBpbml0aWFsUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICB2ZXJ0aWNhbFBsYWNlbWVudDogXCJ0b3BcIixcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogXCJjZW50ZXJcIixcbn07XG5cbmxldCBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSAwO1xuXG4vKiBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0aW1lIGJldHdlZW4gbGFzdCBjbG9zZSBhbmQgbmV3IG9wZW4gaXMgbGVzcyB0aGFuIDUwMG1zICsgU0hPV19ISURFX0RFTEFZICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb25EdXJhdGlvbigpIHtcbiAgbGV0IGFuaW1hdGlvbkR1cmF0aW9uID0gYCR7QU5JTUFUSU9OX0RVUkFUSU9OfW1zYDtcblxuICBpZiAobGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wKSB7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdFRvb2x0aXAgPSBEYXRlLm5vdygpIC0gbGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wO1xuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RUb29sdGlwIDwgNTAwICsgU0hPV19ISURFX0RFTEFZKSB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbiA9IFwiMG1zXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXAoe1xuICBwbGFjZW1lbnQgPSBcImF1dG9cIixcbiAgY29udGVudCxcbiAgY2hpbGRyZW4sXG4gIGV4dGVybmFsVHJpZ2dlclJlZixcbiAgcG9ydGFsQ29udGFpbmVyLFxuICBcImRhdGEtZTJlLXRlc3QtaWRcIjogZGF0YUUyZVRlc3RJZCxcbiAgb25WaXNpYmlsaXR5Q2hhbmdlLFxufTogVG9vbHRpcFByb3BzKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgY29uc3QgdG9vbHRpcElkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBgRFNUb29sdGlwXyR7TWF0aC5mbG9vcihEYXRlLm5vdygpICogTWF0aC5yYW5kb20oKSl9YCxcbiAgICBbXVxuICApO1xuICBjb25zdCBbcG9zaXRpb24sIHNldFBvc2l0aW9uXSA9IHVzZVN0YXRlKGluaXRpYWxQb3NpdGlvbik7XG4gIGNvbnN0IFtpc1Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB0cmlnZ2VyZWRCeUV2ZW50ID0gdXNlUmVmKG51bGwpOyAvLyBpbmRpY2F0ZXMgaWYgdHJpZ2dlcmVkIGJ5IGhvdmVyIG9yIGZvY3VzXG4gIGNvbnN0IGlzVG9vbHRpcEhvdmVyZWQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc1RyaWdnZXJIb3ZlcmVkID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaW50ZXJuYWxUcmlnZ2VyUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB0b29sdGlwUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBkb2N1bWVudCA9IHVzZURvY3VtZW50KCk7XG4gIGNvbnN0IHdpbmRvdyA9IHVzZVdpbmRvdygpO1xuICBjb25zdCBoaWRlVG9vbHRpcFRpbWVvdXRJZCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qgc2hvd1Rvb2x0aXBUaW1lb3V0SWQgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSBleHRlcm5hbFRyaWdnZXJSZWYgfHwgaW50ZXJuYWxUcmlnZ2VyUmVmO1xuXG4gIGNvbnN0IHRvZ2dsZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhdHVzOiBib29sZWFuKSA9PiB7XG4gICAgICBzZXRWaXNpYmxlKHN0YXR1cyk7XG5cbiAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UpIHtcbiAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKHN0YXR1cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvZyB0aW1lIHdoZW4gdG9vbHRpcCBjbG9zZXNcbiAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgIGxhc3RUb29sdGlwSGlkZVRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25WaXNpYmlsaXR5Q2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRyaWdnZXJQb2ludGVyRW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaXNUcmlnZ2VySG92ZXJlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpZiAoIWlzVG9vbHRpcEhvdmVyZWQuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNob3dUb29sdGlwVGltZW91dElkLmN1cnJlbnQpO1xuICAgICAgLy8gRGVsYXkgc2hvdyB0b29sdGlwIHRvIHByZXZlbnQgZmxpY2tlcmluZyB3aGVuIG1vdXNlIG1vdmVzIHF1aWNrbHkgb3ZlciB0cmlnZ2VyXG4gICAgICBzaG93VG9vbHRpcFRpbWVvdXRJZC5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpc1RyaWdnZXJIb3ZlcmVkLmN1cnJlbnQpIHtcbiAgICAgICAgICB0cmlnZ2VyZWRCeUV2ZW50LmN1cnJlbnQgPSBcImhvdmVyXCI7XG4gICAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgU0hPV19ISURFX0RFTEFZKTtcbiAgICB9XG4gIH0sIFt0b2dnbGVWaXNpYmlsaXR5XSk7XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlclBvaW50ZXJMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpc1RyaWdnZXJIb3ZlcmVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBjbGVhclRpbWVvdXQoaGlkZVRvb2x0aXBUaW1lb3V0SWQuY3VycmVudCk7XG4gICAgLy8gRGVsYXkgcmVtb3ZpbmcgdG9vbHRpcCBmcm9tIERPTSB0byBhbGxvdyBob3ZlciBvdmVyIHRvb2x0aXAgZWxlbWVudFxuICAgIGhpZGVUb29sdGlwVGltZW91dElkLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzVG9vbHRpcEhvdmVyZWQuY3VycmVudCAmJlxuICAgICAgICB0cmlnZ2VyZWRCeUV2ZW50LmN1cnJlbnQgPT09IFwiaG92ZXJcIiAmJlxuICAgICAgICAhaXNUcmlnZ2VySG92ZXJlZC5jdXJyZW50XG4gICAgICApIHtcbiAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICB9XG4gICAgfSwgU0hPV19ISURFX0RFTEFZKTtcbiAgfSwgW3RvZ2dsZVZpc2liaWxpdHldKTtcblxuICBjb25zdCBoYW5kbGVUcmlnZ2VyRm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdHJpZ2dlcmVkQnlFdmVudC5jdXJyZW50ID0gXCJmb2N1c1wiO1xuICAgIHRvZ2dsZVZpc2liaWxpdHkodHJ1ZSk7XG4gIH0sIFt0b2dnbGVWaXNpYmlsaXR5XSk7XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlckJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRyaWdnZXJlZEJ5RXZlbnQuY3VycmVudCA9PT0gXCJmb2N1c1wiKSB7XG4gICAgICB0b2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB9XG4gIH0sIFt0b2dnbGVWaXNpYmlsaXR5XSk7XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlcktleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZXZ0KSA9PiB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICB0b2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0b2dnbGVWaXNpYmlsaXR5XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRvb2x0aXBQb2ludGVyRW50ZXIgPSAoKSA9PiB7XG4gICAgaXNUb29sdGlwSG92ZXJlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb29sdGlwUG9pbnRlckxlYXZlID0gKCkgPT4ge1xuICAgIGlzVG9vbHRpcEhvdmVyZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmICh0cmlnZ2VyZWRCeUV2ZW50LmN1cnJlbnQgPT09IFwiaG92ZXJcIikge1xuICAgICAgdG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdChcbiAgICAoKSA9PiAoKSA9PiB7XG4gICAgICAvLyBjbGVhciB0aW1lcnNcbiAgICAgIGNsZWFyVGltZW91dChzaG93VG9vbHRpcFRpbWVvdXRJZC5jdXJyZW50KTtcbiAgICAgIGNsZWFyVGltZW91dChoaWRlVG9vbHRpcFRpbWVvdXRJZC5jdXJyZW50KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdHJpZ2dlcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoZXh0ZXJuYWxUcmlnZ2VyUmVmICYmIGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50ICYmICFjaGlsZHJlbikge1xuICAgICAgdHJpZ2dlciA9IGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50O1xuXG4gICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiMFwiKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJlbnRlclwiLCBoYW5kbGVUcmlnZ2VyUG9pbnRlckVudGVyKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBoYW5kbGVUcmlnZ2VyUG9pbnRlckxlYXZlKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGhhbmRsZVRyaWdnZXJGb2N1cyk7XG4gICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZVRyaWdnZXJCbHVyKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlVHJpZ2dlcktleURvd24pO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICB0cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZW50ZXJcIiwgaGFuZGxlVHJpZ2dlclBvaW50ZXJFbnRlcik7XG4gICAgICAgIHRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBoYW5kbGVUcmlnZ2VyUG9pbnRlckxlYXZlKTtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlVHJpZ2dlckZvY3VzKTtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVUcmlnZ2VyQmx1cik7XG4gICAgICAgIHRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlVHJpZ2dlcktleURvd24pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtcbiAgICBleHRlcm5hbFRyaWdnZXJSZWYsXG4gICAgY2hpbGRyZW4sXG4gICAgaGFuZGxlVHJpZ2dlclBvaW50ZXJFbnRlcixcbiAgICBoYW5kbGVUcmlnZ2VyUG9pbnRlckxlYXZlLFxuICAgIGhhbmRsZVRyaWdnZXJGb2N1cyxcbiAgICBoYW5kbGVUcmlnZ2VyQmx1cixcbiAgICBoYW5kbGVUcmlnZ2VyS2V5RG93bixcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXh0ZXJuYWxUcmlnZ2VyUmVmICYmIGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50ICYmICFjaGlsZHJlbikge1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50O1xuXG4gICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgIHRyaWdnZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1kZXNjcmliZWRieVwiLCB0b29sdGlwSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2V4dGVybmFsVHJpZ2dlclJlZiwgY2hpbGRyZW4sIHRvb2x0aXBJZCwgaXNWaXNpYmxlXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlICYmIHRyaWdnZXJSZWYuY3VycmVudCAmJiB0b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSB0b29sdGlwIHBvc2l0aW9uXG4gICAgICBzZXRQb3NpdGlvbihcbiAgICAgICAgZ2V0VG9vbHRpcFBvc2l0aW9uKHBsYWNlbWVudCwgdHJpZ2dlclJlZiwgdG9vbHRpcFJlZiwgZG9jdW1lbnQsIHdpbmRvdylcbiAgICAgICk7XG4gICAgfVxuICB9LCBbaXNWaXNpYmxlLCBwbGFjZW1lbnQsIHRyaWdnZXJSZWYsIGRvY3VtZW50LCB3aW5kb3ddKTtcblxuICBsZXQgcG9ydGFsO1xuXG4gIGlmIChpc1Zpc2libGUpIHtcbiAgICBjb25zdCB0b29sdGlwRWxtID0gKFxuICAgICAgPFN1YlRoZW1lUHJvdmlkZXIgbmFtZT1cImludmVydGVkXCI+XG4gICAgICAgIDxTdHlsZWRDb250YWluZXJcbiAgICAgICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgICAgICAgIGRhdGEtZHMtaWQ9XCJUb29sdGlwXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgdG9wOiBwb3NpdGlvbi50b3AsXG4gICAgICAgICAgICBsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGdldEFuaW1hdGlvbkR1cmF0aW9uKCksXG4gICAgICAgICAgfX1cbiAgICAgICAgICByZWY9e3Rvb2x0aXBSZWZ9XG4gICAgICAgICAgaWQ9e3Rvb2x0aXBJZH1cbiAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICBob3Jpem9udGFsUGxhY2VtZW50PXtwb3NpdGlvbi5ob3Jpem9udGFsUGxhY2VtZW50fVxuICAgICAgICAgIHZlcnRpY2FsUGxhY2VtZW50PXtwb3NpdGlvbi52ZXJ0aWNhbFBsYWNlbWVudH1cbiAgICAgICAgICBvblBvaW50ZXJFbnRlcj17aGFuZGxlVG9vbHRpcFBvaW50ZXJFbnRlcn1cbiAgICAgICAgICBvblBvaW50ZXJMZWF2ZT17aGFuZGxlVG9vbHRpcFBvaW50ZXJMZWF2ZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzXCI+e2NvbnRlbnR9PC9UZXh0PlxuICAgICAgICAgIDxTdHlsZWRBcnJvd1xuICAgICAgICAgICAgaG9yaXpvbnRhbFBsYWNlbWVudD17cG9zaXRpb24uaG9yaXpvbnRhbFBsYWNlbWVudH1cbiAgICAgICAgICAgIHZlcnRpY2FsUGxhY2VtZW50PXtwb3NpdGlvbi52ZXJ0aWNhbFBsYWNlbWVudH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZENvbnRhaW5lcj5cbiAgICAgIDwvU3ViVGhlbWVQcm92aWRlcj5cbiAgICApO1xuXG4gICAgcG9ydGFsID0gY3JlYXRlUG9ydGFsKHRvb2x0aXBFbG0sIHBvcnRhbENvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KTtcbiAgfVxuXG4gIGNvbnN0IHRyaWdnZXJFbG0gPSBjaGlsZHJlblxuICAgID8gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIHJlZjogdHJpZ2dlclJlZixcbiAgICAgICAgLi4uKGlzVmlzaWJsZSAmJiB7XG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHRvb2x0aXBJZCxcbiAgICAgICAgfSksXG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICBvblBvaW50ZXJFbnRlcjogaGFuZGxlVHJpZ2dlclBvaW50ZXJFbnRlcixcbiAgICAgICAgb25Qb2ludGVyTGVhdmU6IGhhbmRsZVRyaWdnZXJQb2ludGVyTGVhdmUsXG4gICAgICAgIG9uRm9jdXM6IGhhbmRsZVRyaWdnZXJGb2N1cyxcbiAgICAgICAgb25CbHVyOiBoYW5kbGVUcmlnZ2VyQmx1cixcbiAgICAgICAgb25LZXlEb3duOiBoYW5kbGVUcmlnZ2VyS2V5RG93bixcbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0cmlnZ2VyRWxtfVxuICAgICAge3BvcnRhbH1cbiAgICA8Lz5cbiAgKTtcbn1cbiJdfQ== */");
47
+ const StyledArrow = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "production" ? {
48
+ target: "e2kei840"
49
+ } : {
50
+ target: "e2kei840",
51
+ label: "StyledArrow"
52
+ })(_ref2 => {
53
+ let {
54
+ theme,
55
+ verticalPlacement,
56
+ horizontalPlacement
57
+ } = _ref2;
58
+ return {
59
+ position: "absolute",
60
+ width: 0,
61
+ height: 0,
62
+ borderLeft: `${ARROW_SIZE}px solid transparent`,
63
+ borderRight: `${ARROW_SIZE}px solid transparent`,
64
+ ...(verticalPlacement === "top" && {
65
+ top: "100%",
66
+ borderTop: `${ARROW_SIZE}px solid ${theme.values.color.background.primary.default}`
67
+ }),
68
+ ...(verticalPlacement === "bottom" && {
69
+ top: `-${ARROW_SIZE}px`,
70
+ borderBottom: `${ARROW_SIZE}px solid ${theme.values.color.background.primary.default}`
71
+ }),
72
+ ...(horizontalPlacement === "center" && {
73
+ left: "50%",
74
+ transform: "translate(-50%)"
75
+ }),
76
+ ...(horizontalPlacement === "right" && {
77
+ left: `${ARROW_OFFSET}px`
78
+ }),
79
+ ...(horizontalPlacement === "left" && {
80
+ right: `${ARROW_OFFSET}px`
81
+ })
82
+ };
83
+ }, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRvb2x0aXAudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdIb0IiLCJmaWxlIjoiVG9vbHRpcC50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VFZmZlY3QsXG4gIHVzZUNhbGxiYWNrLFxuICBNdXRhYmxlUmVmT2JqZWN0LFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyB1c2VEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdXNlRG9jdW1lbnRcIjtcbmltcG9ydCB7IHVzZVdpbmRvdyB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdXNlV2luZG93XCI7XG5pbXBvcnQgeyBTdWJUaGVtZVByb3ZpZGVyIH0gZnJvbSBcIi4uL1N1YlRoZW1lUHJvdmlkZXIvU3ViVGhlbWVQcm92aWRlclwiO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gXCIuLi9UeXBvZ3JhcGh5L1RleHQvVGV4dFwiO1xuaW1wb3J0IHpJbmRpY2VzIGZyb20gXCIuLi8uLi8uLi9idWlsZC10b2tlbnMvX3ppbmRleC5qc29uXCI7XG5cbmltcG9ydCB7XG4gIEFSUk9XX1NJWkUsXG4gIEFSUk9XX09GRlNFVCxcbiAgQU5JTUFUSU9OX0RJU1RBTkNFLFxuICBnZXRUb29sdGlwUG9zaXRpb24sXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIEJhc2VQcm9wcyA9IHtcbiAgLyogVG9vbHRpcCBjb250ZW50ICovXG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgLyogUGxhY2VtZW50ICovXG4gIHBsYWNlbWVudD86XG4gICAgfCBcImF1dG9cIlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJ0b3AtbGVmdFwiXG4gICAgfCBcInRvcC1yaWdodFwiXG4gICAgfCBcImJvdHRvbS1sZWZ0XCJcbiAgICB8IFwiYm90dG9tLXJpZ2h0XCI7XG4gIC8qIEN1c3RvbSBwb3J0YWwgY29udGFpbmVyIHRvIHJlbmRlciB0b29sdGlwIGludG8gKi9cbiAgcG9ydGFsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG4gIFwiZGF0YS1lMmUtdGVzdC1pZFwiPzogc3RyaW5nO1xuICAvKiBDYWxsZWQgd2hlbiB0b29sdGlwIGFwcGVhcnMgYW5kIGRpc2FwcGVhcnMgKi9cbiAgb25WaXNpYmlsaXR5Q2hhbmdlPzogKGlzVmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmRpdGlvbmFsUHJvcHMgPVxuICB8IHtcbiAgICAgIGV4dGVybmFsVHJpZ2dlclJlZj86IG5ldmVyO1xuICAgICAgLyogVHJpZ2dlciBlbGVtZW50IC0gd3JhcCB0cmlnZ2VyIGVsZW1lbnQgd2l0aGluIFRvb2x0aXAgLSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdHJpZ2dlciBwcm9wICovXG4gICAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIH1cbiAgfCB7XG4gICAgICBjaGlsZHJlbj86IG5ldmVyO1xuICAgICAgLyogVHJpZ2dlciBlbGVtZW50IHJlZiAtIHBhc3MgaW4gYW4gZXh0ZXJuYWwgdHJpZ2dlciBlbGVtZW50ICovXG4gICAgICBleHRlcm5hbFRyaWdnZXJSZWY6IE11dGFibGVSZWZPYmplY3Q8YW55PjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBUb29sdGlwUHJvcHMgPSBCYXNlUHJvcHMgJiBDb25kaXRpb25hbFByb3BzO1xuXG5leHBvcnQgdHlwZSBUb29sdGlwUG9zaXRpb24gPSB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIGhvcml6b250YWxQbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBTdHlsZWRDb250YWluZXJQcm9wcyA9IHtcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogVG9vbHRpcFBvc2l0aW9uW1wiaG9yaXpvbnRhbFBsYWNlbWVudFwiXTtcbiAgdmVydGljYWxQbGFjZW1lbnQ6IFRvb2x0aXBQb3NpdGlvbltcInZlcnRpY2FsUGxhY2VtZW50XCJdO1xufTtcblxuY29uc3QgQU5JTUFUSU9OX0RVUkFUSU9OID0gMjAwO1xuY29uc3QgU0hPV19ISURFX0RFTEFZID0gMjAwO1xuXG5jb25zdCBTdHlsZWRDb250YWluZXIgPSBzdHlsZWQuZGl2PFN0eWxlZENvbnRhaW5lclByb3BzPihcbiAgKHsgdGhlbWUsIGhvcml6b250YWxQbGFjZW1lbnQsIHZlcnRpY2FsUGxhY2VtZW50IH0pID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25EaXN0YW5jZSA9XG4gICAgICB2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIlxuICAgICAgICA/IGAke0FOSU1BVElPTl9ESVNUQU5DRX1weGBcbiAgICAgICAgOiBgLSR7QU5JTUFUSU9OX0RJU1RBTkNFfXB4YDtcbiAgICBjb25zdCBhbmltYXRpb24gPSBrZXlmcmFtZXMoe1xuICAgICAgdG86IHtcbiAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgIGhvcml6b250YWxQbGFjZW1lbnQgPT09IFwiY2VudGVyXCJcbiAgICAgICAgICAgID8gYHRyYW5zbGF0ZSgtNTAlLCAke2FuaW1hdGlvbkRpc3RhbmNlfSlgXG4gICAgICAgICAgICA6IGB0cmFuc2xhdGVZKCR7YW5pbWF0aW9uRGlzdGFuY2V9KWAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IHpJbmRpY2VzLnRvb2x0aXAudmFsdWUsXG4gICAgICBvcGFjaXR5OiAwLFxuICAgICAgYW5pbWF0aW9uOiBgJHtBTklNQVRJT05fRFVSQVRJT059bXMgZWFzZS1vdXQgZm9yd2FyZHMgJHthbmltYXRpb259YCxcbiAgICAgIGJvcmRlclJhZGl1czogdGhlbWUudmFyaWFibGVzLnNpemUuYm9yZGVyUmFkaXVzLnhzLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHQsXG4gICAgICBtYXhXaWR0aDogXCIyMjRweFwiLFxuICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcbiAgICAgIHBhZGRpbmc6IGAke3RoZW1lLnZhcmlhYmxlcy5zaXplLnNwYWNpbmcueHN9ICR7dGhlbWUudmFyaWFibGVzLnNpemUuc3BhY2luZy5zfWAsXG5cbiAgICAgIC4uLihob3Jpem9udGFsUGxhY2VtZW50ID09PSBcImNlbnRlclwiICYmIHtcbiAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTAlKVwiLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuKTtcblxudHlwZSBTdHlsZWRBcnJvd1Byb3BzID0ge1xuICB2ZXJ0aWNhbFBsYWNlbWVudDogVG9vbHRpcFBvc2l0aW9uW1widmVydGljYWxQbGFjZW1lbnRcIl07XG4gIGhvcml6b250YWxQbGFjZW1lbnQ6IFRvb2x0aXBQb3NpdGlvbltcImhvcml6b250YWxQbGFjZW1lbnRcIl07XG59O1xuXG5jb25zdCBTdHlsZWRBcnJvdyA9IHN0eWxlZC5kaXY8U3R5bGVkQXJyb3dQcm9wcz4oXG4gICh7IHRoZW1lLCB2ZXJ0aWNhbFBsYWNlbWVudCwgaG9yaXpvbnRhbFBsYWNlbWVudCB9KSA9PiAoe1xuICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIGJvcmRlckxlZnQ6IGAke0FSUk9XX1NJWkV9cHggc29saWQgdHJhbnNwYXJlbnRgLFxuICAgIGJvcmRlclJpZ2h0OiBgJHtBUlJPV19TSVpFfXB4IHNvbGlkIHRyYW5zcGFyZW50YCxcblxuICAgIC4uLih2ZXJ0aWNhbFBsYWNlbWVudCA9PT0gXCJ0b3BcIiAmJiB7XG4gICAgICB0b3A6IFwiMTAwJVwiLFxuICAgICAgYm9yZGVyVG9wOiBgJHtBUlJPV19TSVpFfXB4IHNvbGlkICR7dGhlbWUudmFsdWVzLmNvbG9yLmJhY2tncm91bmQucHJpbWFyeS5kZWZhdWx0fWAsXG4gICAgfSksXG5cbiAgICAuLi4odmVydGljYWxQbGFjZW1lbnQgPT09IFwiYm90dG9tXCIgJiYge1xuICAgICAgdG9wOiBgLSR7QVJST1dfU0laRX1weGAsXG4gICAgICBib3JkZXJCb3R0b206IGAke0FSUk9XX1NJWkV9cHggc29saWQgJHt0aGVtZS52YWx1ZXMuY29sb3IuYmFja2dyb3VuZC5wcmltYXJ5LmRlZmF1bHR9YCxcbiAgICB9KSxcblxuICAgIC4uLihob3Jpem9udGFsUGxhY2VtZW50ID09PSBcImNlbnRlclwiICYmIHtcbiAgICAgIGxlZnQ6IFwiNTAlXCIsXG4gICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUpXCIsXG4gICAgfSksXG5cbiAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJyaWdodFwiICYmIHtcbiAgICAgIGxlZnQ6IGAke0FSUk9XX09GRlNFVH1weGAsXG4gICAgfSksXG5cbiAgICAuLi4oaG9yaXpvbnRhbFBsYWNlbWVudCA9PT0gXCJsZWZ0XCIgJiYge1xuICAgICAgcmlnaHQ6IGAke0FSUk9XX09GRlNFVH1weGAsXG4gICAgfSksXG4gIH0pXG4pO1xuXG5jb25zdCBpbml0aWFsUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICB2ZXJ0aWNhbFBsYWNlbWVudDogXCJ0b3BcIixcbiAgaG9yaXpvbnRhbFBsYWNlbWVudDogXCJjZW50ZXJcIixcbn07XG5cbmxldCBsYXN0VG9vbHRpcEhpZGVUaW1lc3RhbXAgPSAwO1xuXG4vKiBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0aW1lIGJldHdlZW4gbGFzdCBjbG9zZSBhbmQgbmV3IG9wZW4gaXMgbGVzcyB0aGFuIDUwMG1zICsgU0hPV19ISURFX0RFTEFZICovXG5mdW5jdGlvbiBnZXRBbmltYXRpb25EdXJhdGlvbigpIHtcbiAgbGV0IGFuaW1hdGlvbkR1cmF0aW9uID0gYCR7QU5JTUFUSU9OX0RVUkFUSU9OfW1zYDtcblxuICBpZiAobGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wKSB7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdFRvb2x0aXAgPSBEYXRlLm5vdygpIC0gbGFzdFRvb2x0aXBIaWRlVGltZXN0YW1wO1xuXG4gICAgaWYgKHRpbWVTaW5jZUxhc3RUb29sdGlwIDwgNTAwICsgU0hPV19ISURFX0RFTEFZKSB7XG4gICAgICBhbmltYXRpb25EdXJhdGlvbiA9IFwiMG1zXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXAoe1xuICBwbGFjZW1lbnQgPSBcImF1dG9cIixcbiAgY29udGVudCxcbiAgY2hpbGRyZW4sXG4gIGV4dGVybmFsVHJpZ2dlclJlZixcbiAgcG9ydGFsQ29udGFpbmVyLFxuICBcImRhdGEtZTJlLXRlc3QtaWRcIjogZGF0YUUyZVRlc3RJZCxcbiAgb25WaXNpYmlsaXR5Q2hhbmdlLFxufTogVG9vbHRpcFByb3BzKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgY29uc3QgdG9vbHRpcElkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBgRFNUb29sdGlwXyR7TWF0aC5mbG9vcihEYXRlLm5vdygpICogTWF0aC5yYW5kb20oKSl9YCxcbiAgICBbXVxuICApO1xuICBjb25zdCBbcG9zaXRpb24sIHNldFBvc2l0aW9uXSA9IHVzZVN0YXRlKGluaXRpYWxQb3NpdGlvbik7XG4gIGNvbnN0IFtpc1Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB0cmlnZ2VyZWRCeUV2ZW50ID0gdXNlUmVmKG51bGwpOyAvLyBpbmRpY2F0ZXMgaWYgdHJpZ2dlcmVkIGJ5IGhvdmVyIG9yIGZvY3VzXG4gIGNvbnN0IGlzVG9vbHRpcEhvdmVyZWQgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc1RyaWdnZXJIb3ZlcmVkID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaW50ZXJuYWxUcmlnZ2VyUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB0b29sdGlwUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBkb2N1bWVudCA9IHVzZURvY3VtZW50KCk7XG4gIGNvbnN0IHdpbmRvdyA9IHVzZVdpbmRvdygpO1xuICBjb25zdCBoaWRlVG9vbHRpcFRpbWVvdXRJZCA9IHVzZVJlZihudWxsKTtcbiAgY29uc3Qgc2hvd1Rvb2x0aXBUaW1lb3V0SWQgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSBleHRlcm5hbFRyaWdnZXJSZWYgfHwgaW50ZXJuYWxUcmlnZ2VyUmVmO1xuXG4gIGNvbnN0IHRvZ2dsZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhdHVzOiBib29sZWFuKSA9PiB7XG4gICAgICBzZXRWaXNpYmxlKHN0YXR1cyk7XG5cbiAgICAgIGlmIChvblZpc2liaWxpdHlDaGFuZ2UpIHtcbiAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlKHN0YXR1cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvZyB0aW1lIHdoZW4gdG9vbHRpcCBjbG9zZXNcbiAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgIGxhc3RUb29sdGlwSGlkZVRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25WaXNpYmlsaXR5Q2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRyaWdnZXJQb2ludGVyRW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaXNUcmlnZ2VySG92ZXJlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpZiAoIWlzVG9vbHRpcEhvdmVyZWQuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNob3dUb29sdGlwVGltZW91dElkLmN1cnJlbnQpO1xuICAgICAgLy8gRGVsYXkgc2hvdyB0b29sdGlwIHRvIHByZXZlbnQgZmxpY2tlcmluZyB3aGVuIG1vdXNlIG1vdmVzIHF1aWNrbHkgb3ZlciB0cmlnZ2VyXG4gICAgICBzaG93VG9vbHRpcFRpbWVvdXRJZC5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpc1RyaWdnZXJIb3ZlcmVkLmN1cnJlbnQpIHtcbiAgICAgICAgICB0cmlnZ2VyZWRCeUV2ZW50LmN1cnJlbnQgPSBcImhvdmVyXCI7XG4gICAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSwgU0hPV19ISURFX0RFTEFZKTtcbiAgICB9XG4gIH0sIFt0b2dnbGVWaXNpYmlsaXR5XSk7XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlclBvaW50ZXJMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpc1RyaWdnZXJIb3ZlcmVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBjbGVhclRpbWVvdXQoaGlkZVRvb2x0aXBUaW1lb3V0SWQuY3VycmVudCk7XG4gICAgLy8gRGVsYXkgcmVtb3ZpbmcgdG9vbHRpcCBmcm9tIERPTSB0byBhbGxvdyBob3ZlciBvdmVyIHRvb2x0aXAgZWxlbWVudFxuICAgIGhpZGVUb29sdGlwVGltZW91dElkLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzVG9vbHRpcEhvdmVyZWQuY3VycmVudCAmJlxuICAgICAgICB0cmlnZ2VyZWRCeUV2ZW50LmN1cnJlbnQgPT09IFwiaG92ZXJcIiAmJlxuICAgICAgICAhaXNUcmlnZ2VySG92ZXJlZC5jdXJyZW50XG4gICAgICApIHtcbiAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICB9XG4gICAgfSwgU0hPV19ISURFX0RFTEFZKTtcbiAgfSwgW3RvZ2dsZVZpc2liaWxpdHldKTtcblxuICBjb25zdCBoYW5kbGVUcmlnZ2VyRm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdHJpZ2dlcmVkQnlFdmVudC5jdXJyZW50ID0gXCJmb2N1c1wiO1xuICAgIHRvZ2dsZVZpc2liaWxpdHkodHJ1ZSk7XG4gIH0sIFt0b2dnbGVWaXNpYmlsaXR5XSk7XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlckJsdXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRyaWdnZXJlZEJ5RXZlbnQuY3VycmVudCA9PT0gXCJmb2N1c1wiKSB7XG4gICAgICB0b2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB9XG4gIH0sIFt0b2dnbGVWaXNpYmlsaXR5XSk7XG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlcktleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZXZ0KSA9PiB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICB0b2dnbGVWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0b2dnbGVWaXNpYmlsaXR5XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRvb2x0aXBQb2ludGVyRW50ZXIgPSAoKSA9PiB7XG4gICAgaXNUb29sdGlwSG92ZXJlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVUb29sdGlwUG9pbnRlckxlYXZlID0gKCkgPT4ge1xuICAgIGlzVG9vbHRpcEhvdmVyZWQuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmICh0cmlnZ2VyZWRCeUV2ZW50LmN1cnJlbnQgPT09IFwiaG92ZXJcIikge1xuICAgICAgdG9nZ2xlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdChcbiAgICAoKSA9PiAoKSA9PiB7XG4gICAgICAvLyBjbGVhciB0aW1lcnNcbiAgICAgIGNsZWFyVGltZW91dChzaG93VG9vbHRpcFRpbWVvdXRJZC5jdXJyZW50KTtcbiAgICAgIGNsZWFyVGltZW91dChoaWRlVG9vbHRpcFRpbWVvdXRJZC5jdXJyZW50KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdHJpZ2dlcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoZXh0ZXJuYWxUcmlnZ2VyUmVmICYmIGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50ICYmICFjaGlsZHJlbikge1xuICAgICAgdHJpZ2dlciA9IGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50O1xuXG4gICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiMFwiKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJlbnRlclwiLCBoYW5kbGVUcmlnZ2VyUG9pbnRlckVudGVyKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBoYW5kbGVUcmlnZ2VyUG9pbnRlckxlYXZlKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGhhbmRsZVRyaWdnZXJGb2N1cyk7XG4gICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZVRyaWdnZXJCbHVyKTtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlVHJpZ2dlcktleURvd24pO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodHJpZ2dlcikge1xuICAgICAgICB0cmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZW50ZXJcIiwgaGFuZGxlVHJpZ2dlclBvaW50ZXJFbnRlcik7XG4gICAgICAgIHRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBoYW5kbGVUcmlnZ2VyUG9pbnRlckxlYXZlKTtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlVHJpZ2dlckZvY3VzKTtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVUcmlnZ2VyQmx1cik7XG4gICAgICAgIHRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlVHJpZ2dlcktleURvd24pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtcbiAgICBleHRlcm5hbFRyaWdnZXJSZWYsXG4gICAgY2hpbGRyZW4sXG4gICAgaGFuZGxlVHJpZ2dlclBvaW50ZXJFbnRlcixcbiAgICBoYW5kbGVUcmlnZ2VyUG9pbnRlckxlYXZlLFxuICAgIGhhbmRsZVRyaWdnZXJGb2N1cyxcbiAgICBoYW5kbGVUcmlnZ2VyQmx1cixcbiAgICBoYW5kbGVUcmlnZ2VyS2V5RG93bixcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXh0ZXJuYWxUcmlnZ2VyUmVmICYmIGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50ICYmICFjaGlsZHJlbikge1xuICAgICAgY29uc3QgdHJpZ2dlciA9IGV4dGVybmFsVHJpZ2dlclJlZi5jdXJyZW50O1xuXG4gICAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAgIHRyaWdnZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1kZXNjcmliZWRieVwiLCB0b29sdGlwSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlci5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2V4dGVybmFsVHJpZ2dlclJlZiwgY2hpbGRyZW4sIHRvb2x0aXBJZCwgaXNWaXNpYmxlXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNWaXNpYmxlICYmIHRyaWdnZXJSZWYuY3VycmVudCAmJiB0b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIGNhbGN1bGF0ZSB0b29sdGlwIHBvc2l0aW9uXG4gICAgICBzZXRQb3NpdGlvbihcbiAgICAgICAgZ2V0VG9vbHRpcFBvc2l0aW9uKHBsYWNlbWVudCwgdHJpZ2dlclJlZiwgdG9vbHRpcFJlZiwgZG9jdW1lbnQsIHdpbmRvdylcbiAgICAgICk7XG4gICAgfVxuICB9LCBbaXNWaXNpYmxlLCBwbGFjZW1lbnQsIHRyaWdnZXJSZWYsIGRvY3VtZW50LCB3aW5kb3ddKTtcblxuICBsZXQgcG9ydGFsO1xuXG4gIGlmIChpc1Zpc2libGUpIHtcbiAgICBjb25zdCB0b29sdGlwRWxtID0gKFxuICAgICAgPFN1YlRoZW1lUHJvdmlkZXIgbmFtZT1cImludmVydGVkXCI+XG4gICAgICAgIDxTdHlsZWRDb250YWluZXJcbiAgICAgICAgICBkYXRhLWUyZS10ZXN0LWlkPXtkYXRhRTJlVGVzdElkfVxuICAgICAgICAgIGRhdGEtZHMtaWQ9XCJUb29sdGlwXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgdG9wOiBwb3NpdGlvbi50b3AsXG4gICAgICAgICAgICBsZWZ0OiBwb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGdldEFuaW1hdGlvbkR1cmF0aW9uKCksXG4gICAgICAgICAgfX1cbiAgICAgICAgICByZWY9e3Rvb2x0aXBSZWZ9XG4gICAgICAgICAgaWQ9e3Rvb2x0aXBJZH1cbiAgICAgICAgICByb2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICBob3Jpem9udGFsUGxhY2VtZW50PXtwb3NpdGlvbi5ob3Jpem9udGFsUGxhY2VtZW50fVxuICAgICAgICAgIHZlcnRpY2FsUGxhY2VtZW50PXtwb3NpdGlvbi52ZXJ0aWNhbFBsYWNlbWVudH1cbiAgICAgICAgICBvblBvaW50ZXJFbnRlcj17aGFuZGxlVG9vbHRpcFBvaW50ZXJFbnRlcn1cbiAgICAgICAgICBvblBvaW50ZXJMZWF2ZT17aGFuZGxlVG9vbHRpcFBvaW50ZXJMZWF2ZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzXCI+e2NvbnRlbnR9PC9UZXh0PlxuICAgICAgICAgIDxTdHlsZWRBcnJvd1xuICAgICAgICAgICAgaG9yaXpvbnRhbFBsYWNlbWVudD17cG9zaXRpb24uaG9yaXpvbnRhbFBsYWNlbWVudH1cbiAgICAgICAgICAgIHZlcnRpY2FsUGxhY2VtZW50PXtwb3NpdGlvbi52ZXJ0aWNhbFBsYWNlbWVudH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZENvbnRhaW5lcj5cbiAgICAgIDwvU3ViVGhlbWVQcm92aWRlcj5cbiAgICApO1xuXG4gICAgcG9ydGFsID0gY3JlYXRlUG9ydGFsKHRvb2x0aXBFbG0sIHBvcnRhbENvbnRhaW5lciB8fCBkb2N1bWVudC5ib2R5KTtcbiAgfVxuXG4gIGNvbnN0IHRyaWdnZXJFbG0gPSBjaGlsZHJlblxuICAgID8gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIHJlZjogdHJpZ2dlclJlZixcbiAgICAgICAgLi4uKGlzVmlzaWJsZSAmJiB7XG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHRvb2x0aXBJZCxcbiAgICAgICAgfSksXG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICBvblBvaW50ZXJFbnRlcjogaGFuZGxlVHJpZ2dlclBvaW50ZXJFbnRlcixcbiAgICAgICAgb25Qb2ludGVyTGVhdmU6IGhhbmRsZVRyaWdnZXJQb2ludGVyTGVhdmUsXG4gICAgICAgIG9uRm9jdXM6IGhhbmRsZVRyaWdnZXJGb2N1cyxcbiAgICAgICAgb25CbHVyOiBoYW5kbGVUcmlnZ2VyQmx1cixcbiAgICAgICAgb25LZXlEb3duOiBoYW5kbGVUcmlnZ2VyS2V5RG93bixcbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0cmlnZ2VyRWxtfVxuICAgICAge3BvcnRhbH1cbiAgICA8Lz5cbiAgKTtcbn1cbiJdfQ== */");
84
+ const initialPosition = {
85
+ top: 0,
86
+ left: 0,
87
+ verticalPlacement: "top",
88
+ horizontalPlacement: "center"
89
+ };
90
+ let lastTooltipHideTimestamp = 0;
91
+
92
+ /* Disable animation if time between last close and new open is less than 500ms + SHOW_HIDE_DELAY */
93
+ function getAnimationDuration() {
94
+ let animationDuration = `${ANIMATION_DURATION}ms`;
95
+ if (lastTooltipHideTimestamp) {
96
+ const timeSinceLastTooltip = Date.now() - lastTooltipHideTimestamp;
97
+ if (timeSinceLastTooltip < 500 + SHOW_HIDE_DELAY) {
98
+ animationDuration = "0ms";
99
+ }
100
+ }
101
+ return animationDuration;
102
+ }
103
+ function Tooltip(_ref3) {
104
+ let {
105
+ placement = "auto",
106
+ content,
107
+ children,
108
+ externalTriggerRef,
109
+ portalContainer,
110
+ "data-e2e-test-id": dataE2eTestId,
111
+ onVisibilityChange
112
+ } = _ref3;
113
+ const tooltipId = useMemo(() => `DSTooltip_${Math.floor(Date.now() * Math.random())}`, []);
114
+ const [position, setPosition] = useState(initialPosition);
115
+ const [isVisible, setVisible] = useState(false);
116
+ const triggeredByEvent = useRef(null); // indicates if triggered by hover or focus
117
+ const isTooltipHovered = useRef(false);
118
+ const isTriggerHovered = useRef(false);
119
+ const internalTriggerRef = useRef(null);
120
+ const tooltipRef = useRef(null);
121
+ const document = useDocument();
122
+ const window = useWindow();
123
+ const hideTooltipTimeoutId = useRef(null);
124
+ const showTooltipTimeoutId = useRef(null);
125
+ const triggerRef = externalTriggerRef || internalTriggerRef;
126
+ const toggleVisibility = useCallback(status => {
127
+ setVisible(status);
128
+ if (onVisibilityChange) {
129
+ onVisibilityChange(status);
130
+ }
131
+
132
+ // log time when tooltip closes
133
+ if (!status) {
134
+ lastTooltipHideTimestamp = Date.now();
135
+ }
136
+ }, [onVisibilityChange]);
137
+ const handleTriggerPointerEnter = useCallback(() => {
138
+ isTriggerHovered.current = true;
139
+ if (!isTooltipHovered.current) {
140
+ clearTimeout(showTooltipTimeoutId.current);
141
+ // Delay show tooltip to prevent flickering when mouse moves quickly over trigger
142
+ showTooltipTimeoutId.current = setTimeout(() => {
143
+ if (isTriggerHovered.current) {
144
+ triggeredByEvent.current = "hover";
145
+ toggleVisibility(true);
146
+ }
147
+ }, SHOW_HIDE_DELAY);
148
+ }
149
+ }, [toggleVisibility]);
150
+ const handleTriggerPointerLeave = useCallback(() => {
151
+ isTriggerHovered.current = false;
152
+ clearTimeout(hideTooltipTimeoutId.current);
153
+ // Delay removing tooltip from DOM to allow hover over tooltip element
154
+ hideTooltipTimeoutId.current = setTimeout(() => {
155
+ if (!isTooltipHovered.current && triggeredByEvent.current === "hover" && !isTriggerHovered.current) {
156
+ toggleVisibility(false);
157
+ }
158
+ }, SHOW_HIDE_DELAY);
159
+ }, [toggleVisibility]);
160
+ const handleTriggerFocus = useCallback(() => {
161
+ triggeredByEvent.current = "focus";
162
+ toggleVisibility(true);
163
+ }, [toggleVisibility]);
164
+ const handleTriggerBlur = useCallback(() => {
165
+ if (triggeredByEvent.current === "focus") {
166
+ toggleVisibility(false);
167
+ }
168
+ }, [toggleVisibility]);
169
+ const handleTriggerKeyDown = useCallback(evt => {
170
+ if (evt.key === "Escape") {
171
+ toggleVisibility(false);
172
+ }
173
+ }, [toggleVisibility]);
174
+ const handleTooltipPointerEnter = () => {
175
+ isTooltipHovered.current = true;
176
+ };
177
+ const handleTooltipPointerLeave = () => {
178
+ isTooltipHovered.current = false;
179
+ if (triggeredByEvent.current === "hover") {
180
+ toggleVisibility(false);
181
+ }
182
+ };
183
+ useEffect(() => () => {
184
+ // clear timers
185
+ clearTimeout(showTooltipTimeoutId.current);
186
+ clearTimeout(hideTooltipTimeoutId.current);
187
+ }, []);
188
+ useEffect(() => {
189
+ let trigger;
190
+ if (externalTriggerRef && externalTriggerRef.current && !children) {
191
+ trigger = externalTriggerRef.current;
192
+ trigger.setAttribute("tabindex", "0");
193
+ trigger.addEventListener("pointerenter", handleTriggerPointerEnter);
194
+ trigger.addEventListener("pointerleave", handleTriggerPointerLeave);
195
+ trigger.addEventListener("focus", handleTriggerFocus);
196
+ trigger.addEventListener("blur", handleTriggerBlur);
197
+ trigger.addEventListener("keydown", handleTriggerKeyDown);
198
+ }
199
+ return () => {
200
+ if (trigger) {
201
+ trigger.removeEventListener("pointerenter", handleTriggerPointerEnter);
202
+ trigger.removeEventListener("pointerleave", handleTriggerPointerLeave);
203
+ trigger.removeEventListener("focus", handleTriggerFocus);
204
+ trigger.removeEventListener("blur", handleTriggerBlur);
205
+ trigger.removeEventListener("keydown", handleTriggerKeyDown);
206
+ }
207
+ };
208
+ }, [externalTriggerRef, children, handleTriggerPointerEnter, handleTriggerPointerLeave, handleTriggerFocus, handleTriggerBlur, handleTriggerKeyDown]);
209
+ useEffect(() => {
210
+ if (externalTriggerRef && externalTriggerRef.current && !children) {
211
+ const trigger = externalTriggerRef.current;
212
+ if (isVisible) {
213
+ trigger.setAttribute("aria-describedby", tooltipId);
214
+ } else {
215
+ trigger.removeAttribute("aria-describedby");
216
+ }
217
+ }
218
+ }, [externalTriggerRef, children, tooltipId, isVisible]);
219
+ useLayoutEffect(() => {
220
+ if (isVisible && triggerRef.current && tooltipRef.current) {
221
+ // calculate tooltip position
222
+ setPosition(getTooltipPosition(placement, triggerRef, tooltipRef, document, window));
223
+ }
224
+ }, [isVisible, placement, triggerRef, document, window]);
225
+ let portal;
226
+ if (isVisible) {
227
+ const tooltipElm = /*#__PURE__*/React.createElement(SubThemeProvider, {
228
+ name: "inverted"
229
+ }, /*#__PURE__*/React.createElement(StyledContainer, {
230
+ "data-e2e-test-id": dataE2eTestId,
231
+ "data-ds-id": "Tooltip",
232
+ style: {
233
+ top: position.top,
234
+ left: position.left,
235
+ animationDuration: getAnimationDuration()
236
+ },
237
+ ref: tooltipRef,
238
+ id: tooltipId,
239
+ role: "tooltip",
240
+ "aria-hidden": "true",
241
+ horizontalPlacement: position.horizontalPlacement,
242
+ verticalPlacement: position.verticalPlacement,
243
+ onPointerEnter: handleTooltipPointerEnter,
244
+ onPointerLeave: handleTooltipPointerLeave
245
+ }, /*#__PURE__*/React.createElement(Text, {
246
+ size: "s"
247
+ }, content), /*#__PURE__*/React.createElement(StyledArrow, {
248
+ horizontalPlacement: position.horizontalPlacement,
249
+ verticalPlacement: position.verticalPlacement
250
+ })));
251
+ portal = /*#__PURE__*/createPortal(tooltipElm, portalContainer || document.body);
252
+ }
253
+ const triggerElm = children ? /*#__PURE__*/React.cloneElement(children, {
254
+ ref: triggerRef,
255
+ ...(isVisible && {
256
+ "aria-describedby": tooltipId
257
+ }),
258
+ tabIndex: 0,
259
+ onPointerEnter: handleTriggerPointerEnter,
260
+ onPointerLeave: handleTriggerPointerLeave,
261
+ onFocus: handleTriggerFocus,
262
+ onBlur: handleTriggerBlur,
263
+ onKeyDown: handleTriggerKeyDown
264
+ }) : null;
265
+ return /*#__PURE__*/React.createElement(React.Fragment, null, triggerElm, portal);
266
+ }
267
+
268
+ export { Tooltip };
269
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useLayoutEffect,\n useEffect,\n useCallback,\n MutableRefObject,\n useMemo,\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 { Text } from \"../Typography/Text/Text\";\nimport zIndices from \"../../../build-tokens/_zindex.json\";\n\nimport {\n ARROW_SIZE,\n ARROW_OFFSET,\n ANIMATION_DISTANCE,\n getTooltipPosition,\n} from \"./utils\";\n\nexport type BaseProps = {\n /* Tooltip content */\n content: string;\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 \"data-e2e-test-id\"?: string;\n /* Called when tooltip appears and disappears */\n onVisibilityChange?: (isVisible: boolean) => void;\n};\n\nexport type ConditionalProps =\n | {\n externalTriggerRef?: never;\n /* Trigger element - wrap trigger element within Tooltip - takes precedence over trigger prop */\n children: React.ReactElement;\n }\n | {\n children?: never;\n /* Trigger element ref - pass in an external trigger element */\n externalTriggerRef: MutableRefObject<any>;\n };\n\nexport type TooltipProps = BaseProps & ConditionalProps;\n\nexport type TooltipPosition = {\n top: number;\n left: number;\n horizontalPlacement: \"left\" | \"right\" | \"center\";\n verticalPlacement: \"top\" | \"bottom\";\n};\n\ntype StyledContainerProps = {\n horizontalPlacement: TooltipPosition[\"horizontalPlacement\"];\n verticalPlacement: TooltipPosition[\"verticalPlacement\"];\n};\n\nconst ANIMATION_DURATION = 200;\nconst SHOW_HIDE_DELAY = 200;\n\nconst StyledContainer = styled.div<StyledContainerProps>(\n ({ theme, horizontalPlacement, verticalPlacement }) => {\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 return {\n position: \"absolute\",\n zIndex: zIndices.tooltip.value,\n opacity: 0,\n animation: `${ANIMATION_DURATION}ms ease-out forwards ${animation}`,\n borderRadius: theme.variables.size.borderRadius.xs,\n backgroundColor: theme.values.color.background.primary.default,\n maxWidth: \"224px\",\n boxSizing: \"border-box\",\n padding: `${theme.variables.size.spacing.xs} ${theme.variables.size.spacing.s}`,\n\n ...(horizontalPlacement === \"center\" && {\n transform: \"translate(-50%)\",\n }),\n };\n }\n);\n\ntype StyledArrowProps = {\n verticalPlacement: TooltipPosition[\"verticalPlacement\"];\n horizontalPlacement: TooltipPosition[\"horizontalPlacement\"];\n};\n\nconst StyledArrow = styled.div<StyledArrowProps>(\n ({ theme, verticalPlacement, horizontalPlacement }) => ({\n position: \"absolute\",\n width: 0,\n height: 0,\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n\n ...(verticalPlacement === \"top\" && {\n top: \"100%\",\n borderTop: `${ARROW_SIZE}px solid ${theme.values.color.background.primary.default}`,\n }),\n\n ...(verticalPlacement === \"bottom\" && {\n top: `-${ARROW_SIZE}px`,\n borderBottom: `${ARROW_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: `${ARROW_OFFSET}px`,\n }),\n\n ...(horizontalPlacement === \"left\" && {\n right: `${ARROW_OFFSET}px`,\n }),\n })\n);\n\nconst initialPosition: TooltipPosition = {\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\nexport function Tooltip({\n placement = \"auto\",\n content,\n children,\n externalTriggerRef,\n portalContainer,\n \"data-e2e-test-id\": dataE2eTestId,\n onVisibilityChange,\n}: TooltipProps): React.ReactElement {\n const tooltipId = useMemo(\n () => `DSTooltip_${Math.floor(Date.now() * Math.random())}`,\n []\n );\n const [position, setPosition] = useState(initialPosition);\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 internalTriggerRef = useRef(null);\n const tooltipRef = useRef(null);\n const document = useDocument();\n const window = useWindow();\n const hideTooltipTimeoutId = useRef(null);\n const showTooltipTimeoutId = 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 // log time when tooltip closes\n if (!status) {\n lastTooltipHideTimestamp = Date.now();\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 && 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 && 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 useLayoutEffect(() => {\n if (isVisible && triggerRef.current && tooltipRef.current) {\n // calculate tooltip position\n setPosition(\n getTooltipPosition(placement, triggerRef, tooltipRef, document, window)\n );\n }\n }, [isVisible, placement, triggerRef, document, window]);\n\n let portal;\n\n if (isVisible) {\n const tooltipElm = (\n <SubThemeProvider name=\"inverted\">\n <StyledContainer\n data-e2e-test-id={dataE2eTestId}\n data-ds-id=\"Tooltip\"\n style={{\n top: position.top,\n left: position.left,\n animationDuration: getAnimationDuration(),\n }}\n ref={tooltipRef}\n id={tooltipId}\n role=\"tooltip\"\n aria-hidden=\"true\"\n horizontalPlacement={position.horizontalPlacement}\n verticalPlacement={position.verticalPlacement}\n onPointerEnter={handleTooltipPointerEnter}\n onPointerLeave={handleTooltipPointerLeave}\n >\n <Text size=\"s\">{content}</Text>\n <StyledArrow\n horizontalPlacement={position.horizontalPlacement}\n verticalPlacement={position.verticalPlacement}\n />\n </StyledContainer>\n </SubThemeProvider>\n );\n\n portal = createPortal(tooltipElm, portalContainer || document.body);\n }\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: handleTriggerFocus,\n onBlur: handleTriggerBlur,\n onKeyDown: handleTriggerKeyDown,\n })\n : null;\n\n return (\n <>\n {triggerElm}\n {portal}\n </>\n );\n}\n"],"names":["ANIMATION_DURATION","SHOW_HIDE_DELAY","StyledContainer","_styled","process","env","NODE_ENV","target","label","_ref","theme","horizontalPlacement","verticalPlacement","animationDistance","ANIMATION_DISTANCE","animation","keyframes","to","opacity","transform","position","zIndex","zIndices","tooltip","value","borderRadius","variables","size","xs","backgroundColor","values","color","background","primary","default","maxWidth","boxSizing","padding","spacing","s","StyledArrow","_ref2","width","height","borderLeft","ARROW_SIZE","borderRight","top","borderTop","borderBottom","left","ARROW_OFFSET","right","initialPosition","lastTooltipHideTimestamp","getAnimationDuration","animationDuration","timeSinceLastTooltip","Date","now","Tooltip","_ref3","placement","content","children","externalTriggerRef","portalContainer","dataE2eTestId","onVisibilityChange","tooltipId","useMemo","Math","floor","random","setPosition","useState","isVisible","setVisible","triggeredByEvent","useRef","isTooltipHovered","isTriggerHovered","internalTriggerRef","tooltipRef","document","useDocument","window","useWindow","hideTooltipTimeoutId","showTooltipTimeoutId","triggerRef","toggleVisibility","useCallback","status","handleTriggerPointerEnter","current","clearTimeout","setTimeout","handleTriggerPointerLeave","handleTriggerFocus","handleTriggerBlur","handleTriggerKeyDown","evt","key","handleTooltipPointerEnter","handleTooltipPointerLeave","useEffect","trigger","setAttribute","addEventListener","removeEventListener","removeAttribute","useLayoutEffect","getTooltipPosition","portal","tooltipElm","React","createElement","SubThemeProvider","name","style","ref","id","role","onPointerEnter","onPointerLeave","Text","createPortal","body","triggerElm","cloneElement","tabIndex","onFocus","onBlur","onKeyDown","Fragment"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { RefObject } from "react";
2
+ import type { TooltipProps, TooltipPosition } from "./Tooltip";
3
+ export declare const DISTANCE_FROM_TRIGGER = 4;
4
+ export declare const ANIMATION_DISTANCE = 8;
5
+ export declare const ARROW_SIZE = 6;
6
+ export declare const TOOLTIP_MARGIN: number;
7
+ export declare const ARROW_OFFSET = 8;
8
+ /**
9
+ * Get tooltip position
10
+ */
11
+ export declare function getTooltipPosition(placement: TooltipProps["placement"], triggerRef: RefObject<any>, tooltipRef: RefObject<any>, document: Document, window: Window): TooltipPosition;
@@ -0,0 +1,75 @@
1
+ const DISTANCE_FROM_TRIGGER = 4;
2
+ const ANIMATION_DISTANCE = 8;
3
+ const ARROW_SIZE = 6;
4
+ const TOOLTIP_MARGIN = ARROW_SIZE + ANIMATION_DISTANCE + DISTANCE_FROM_TRIGGER;
5
+ const ARROW_OFFSET = 8;
6
+
7
+ /**
8
+ * Get tooltip position
9
+ */
10
+ function getTooltipPosition(placement, triggerRef, tooltipRef, document, window) {
11
+ const triggerRect = triggerRef.current.getBoundingClientRect();
12
+ const tooltipRect = tooltipRef.current.getBoundingClientRect();
13
+ const viewportWidth = document.documentElement.clientWidth;
14
+ let top = 0;
15
+ let left = 0;
16
+ let verticalPlacement = "top";
17
+ let horizontalPlacement = "center";
18
+ switch (placement) {
19
+ case "top":
20
+ case "bottom":
21
+ verticalPlacement = placement;
22
+ break;
23
+ case "top-left":
24
+ case "top-right":
25
+ case "bottom-left":
26
+ case "bottom-right":
27
+ {
28
+ const placements = placement.split("-");
29
+ verticalPlacement = placements[0];
30
+ horizontalPlacement = placements[1];
31
+ break;
32
+ }
33
+ default:
34
+ // If there is no space on the top of trigger, then place it at the bottom
35
+ if (triggerRect.top < tooltipRect.height) {
36
+ verticalPlacement = "bottom";
37
+ }
38
+
39
+ // Check if we have space on the left for half of the tooltip width
40
+ if (triggerRect.left >= tooltipRect.width / 2) {
41
+ // Check if we have space on the right for half of the tooltip width
42
+ if (triggerRect.left + triggerRect.width / 2 + tooltipRect.width / 2 > viewportWidth) {
43
+ // no space on the right
44
+ horizontalPlacement = "left";
45
+ }
46
+ } else {
47
+ // We don't have space on the left
48
+ horizontalPlacement = "right";
49
+ }
50
+ }
51
+ if (verticalPlacement === "top") {
52
+ top = triggerRect.top - tooltipRect.height - TOOLTIP_MARGIN;
53
+ } else {
54
+ top = triggerRect.bottom + TOOLTIP_MARGIN;
55
+ }
56
+ switch (horizontalPlacement) {
57
+ case "left":
58
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width + ARROW_OFFSET + ARROW_SIZE;
59
+ break;
60
+ case "right":
61
+ left = triggerRect.left + triggerRect.width / 2 - ARROW_OFFSET - ARROW_SIZE;
62
+ break;
63
+ default:
64
+ left = triggerRect.left + triggerRect.width / 2;
65
+ }
66
+ return {
67
+ top: top + window.scrollY,
68
+ left: left + window.scrollX,
69
+ horizontalPlacement,
70
+ verticalPlacement
71
+ };
72
+ }
73
+
74
+ export { ANIMATION_DISTANCE, ARROW_OFFSET, ARROW_SIZE, DISTANCE_FROM_TRIGGER, TOOLTIP_MARGIN, getTooltipPosition };
75
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../../src/components/Tooltip/utils.ts"],"sourcesContent":["import { RefObject } from \"react\";\nimport type { TooltipProps, TooltipPosition } from \"./Tooltip\";\n\nexport const DISTANCE_FROM_TRIGGER = 4;\nexport const ANIMATION_DISTANCE = 8;\nexport const ARROW_SIZE = 6;\nexport const TOOLTIP_MARGIN =\n ARROW_SIZE + ANIMATION_DISTANCE + DISTANCE_FROM_TRIGGER;\nexport const ARROW_OFFSET = 8;\n\n/**\n * Get tooltip position\n */\nexport function getTooltipPosition(\n placement: TooltipProps[\"placement\"],\n triggerRef: RefObject<any>,\n tooltipRef: RefObject<any>,\n document: Document,\n window: Window\n): TooltipPosition {\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const tooltipRect = tooltipRef.current.getBoundingClientRect();\n const viewportWidth = document.documentElement.clientWidth;\n let top = 0;\n let left = 0;\n let verticalPlacement: TooltipPosition[\"verticalPlacement\"] = \"top\";\n let horizontalPlacement: TooltipPosition[\"horizontalPlacement\"] = \"center\";\n\n switch (placement) {\n case \"top\":\n case \"bottom\":\n verticalPlacement = placement;\n break;\n case \"top-left\":\n case \"top-right\":\n case \"bottom-left\":\n case \"bottom-right\": {\n const placements = placement.split(\"-\");\n\n verticalPlacement = placements[0] as TooltipPosition[\"verticalPlacement\"];\n horizontalPlacement =\n placements[1] as TooltipPosition[\"horizontalPlacement\"];\n break;\n }\n default:\n // If there is no space on the top of trigger, then place it at the bottom\n if (triggerRect.top < tooltipRect.height) {\n verticalPlacement = \"bottom\";\n }\n\n // Check if we have space on the left for half of the tooltip width\n if (triggerRect.left >= tooltipRect.width / 2) {\n // Check if we have space on the right for half of the tooltip width\n if (\n triggerRect.left + triggerRect.width / 2 + tooltipRect.width / 2 >\n viewportWidth\n ) {\n // no space on the right\n horizontalPlacement = \"left\";\n }\n } else {\n // We don't have space on the left\n horizontalPlacement = \"right\";\n }\n }\n\n if (verticalPlacement === \"top\") {\n top = triggerRect.top - tooltipRect.height - TOOLTIP_MARGIN;\n } else {\n top = triggerRect.bottom + TOOLTIP_MARGIN;\n }\n\n switch (horizontalPlacement) {\n case \"left\":\n left =\n triggerRect.left +\n triggerRect.width / 2 -\n tooltipRect.width +\n ARROW_OFFSET +\n ARROW_SIZE;\n break;\n case \"right\":\n left =\n triggerRect.left + triggerRect.width / 2 - ARROW_OFFSET - ARROW_SIZE;\n break;\n default:\n left = triggerRect.left + triggerRect.width / 2;\n }\n\n return {\n top: top + window.scrollY,\n left: left + window.scrollX,\n horizontalPlacement,\n verticalPlacement,\n };\n}\n"],"names":["DISTANCE_FROM_TRIGGER","ANIMATION_DISTANCE","ARROW_SIZE","TOOLTIP_MARGIN","ARROW_OFFSET","getTooltipPosition","placement","triggerRef","tooltipRef","document","window","triggerRect","current","getBoundingClientRect","tooltipRect","viewportWidth","documentElement","clientWidth","top","left","verticalPlacement","horizontalPlacement","placements","split","height","width","bottom","scrollY","scrollX"],"mappings":"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"}
@@ -49,3 +49,4 @@ export * from "./components/LoadingSpinner/LoadingSpinner";
49
49
  export * from "./components/Pagination/Pagination";
50
50
  export * from "./components/DataTable";
51
51
  export * from "./components/Form/SegmentedControl/SegmentedControl";
52
+ export * from "./components/Tooltip/Tooltip";
@@ -44,6 +44,7 @@ export { Collapsible, CollapsibleHeader } from './components/Collapsible/Collaps
44
44
  export { LoadingSpinner } from './components/LoadingSpinner/LoadingSpinner.js';
45
45
  export { Pagination } from './components/Pagination/Pagination.js';
46
46
  export { SegmentedControl } from './components/Form/SegmentedControl/SegmentedControl.js';
47
+ export { Tooltip } from './components/Tooltip/Tooltip.js';
47
48
  export { Input } from './components/Form/Input/Input.js';
48
49
  export { PasswordInput } from './components/Form/PasswordInput/PasswordInput.js';
49
50
  export { BaseDataTable, DataTable } from './components/DataTable/DataTable.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/index.ts"],"sourcesContent":["import {\n ambossVisualConfiguration,\n VisualConfig,\n} from \"../build-tokens/visualConfig\";\n\nexport type { VisualConfig };\nexport const { dark, light } = ambossVisualConfiguration;\nexport { ThemeProvider, CacheProvider } from \"@emotion/react\";\nexport { default as createCache } from \"@emotion/cache\";\nexport * from \"./components/Card/Card\";\nexport * from \"./components/Card/CardBox\";\nexport * from \"./components/Box/Box\";\nexport * from \"./components/Inline/Inline\";\nexport * from \"./components/Stack/Stack\";\nexport * from \"./components/Typography/Header/Header\";\nexport * from \"./components/Typography/Text/Text\";\nexport * from \"./components/Typography/TextClamped/TextClamped\";\nexport * from \"./components/Typography/StyledText/StyledText\";\nexport * from \"./components/Link/Link\";\nexport * from \"./components/Icon/Icon\";\nexport * from \"./components/Button/Button\";\nexport * from \"./components/Divider/Divider\";\nexport * from \"./components/Column/Columns\";\nexport * from \"./components/Tabs/Tabs\";\nexport * from \"./components/Badge/Badge\";\nexport * from \"./components/SearchResult/SearchResult\";\nexport * from \"./components/Form/ToggleButton/ToggleButton\";\nexport * from \"./components/DropdownMenu/DropdownMenu\";\nexport * from \"./components/Form/FormFieldGroup/FormFieldGroup\";\nexport * from \"./components/Form/Input\";\nexport * from \"./components/Form/Checkbox/Checkbox\";\nexport * from \"./components/Form/Toggle/Toggle\";\nexport * from \"./components/Form/Radio/Radio\";\nexport * from \"./components/Form/RadioButton/RadioButton\";\nexport * from \"./components/Form/Textarea/Textarea\";\nexport * from \"./components/Form/Select/Select\";\nexport * from \"./components/SubThemeProvider/SubThemeProvider\";\nexport * from \"./components/PictogramButton/PictogramButton\";\nexport * from \"./components/MediaViewerBar/MediaViewerBar\";\nexport * from \"./components/SegmentedProgressBar/SegmentedProgressBar\";\nexport * from \"./components/ProgressBar/ProgressBar\";\nexport * from \"./components/Container/Container\";\nexport * from \"./components/Form/PasswordInput\";\nexport * from \"./components/RoundButton/RoundButton\";\nexport * from \"./components/Notification/Notification\";\nexport * from \"./components/Logo/Logo\";\nexport * from \"./components/MediaItem/MediaItem\";\nexport * from \"./components/Callout/Callout\";\nexport * from \"./components/Patterns/Modal/Modal\";\nexport * from \"./components/Patterns/ButtonGroup/ButtonGroup\";\nexport * from \"./components/Collapsible/Collapsible\";\nexport * from \"./components/LoadingSpinner/LoadingSpinner\";\nexport * from \"./components/Pagination/Pagination\";\nexport * from \"./components/DataTable\";\nexport * from \"./components/Form/SegmentedControl/SegmentedControl\";\n"],"names":["dark","light","ambossVisualConfiguration"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMa,MAAA;EAAEA,IAAI;AAAEC,EAAAA,KAAAA;AAAM,CAAC,GAAGC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/index.ts"],"sourcesContent":["import {\n ambossVisualConfiguration,\n VisualConfig,\n} from \"../build-tokens/visualConfig\";\n\nexport type { VisualConfig };\nexport const { dark, light } = ambossVisualConfiguration;\nexport { ThemeProvider, CacheProvider } from \"@emotion/react\";\nexport { default as createCache } from \"@emotion/cache\";\nexport * from \"./components/Card/Card\";\nexport * from \"./components/Card/CardBox\";\nexport * from \"./components/Box/Box\";\nexport * from \"./components/Inline/Inline\";\nexport * from \"./components/Stack/Stack\";\nexport * from \"./components/Typography/Header/Header\";\nexport * from \"./components/Typography/Text/Text\";\nexport * from \"./components/Typography/TextClamped/TextClamped\";\nexport * from \"./components/Typography/StyledText/StyledText\";\nexport * from \"./components/Link/Link\";\nexport * from \"./components/Icon/Icon\";\nexport * from \"./components/Button/Button\";\nexport * from \"./components/Divider/Divider\";\nexport * from \"./components/Column/Columns\";\nexport * from \"./components/Tabs/Tabs\";\nexport * from \"./components/Badge/Badge\";\nexport * from \"./components/SearchResult/SearchResult\";\nexport * from \"./components/Form/ToggleButton/ToggleButton\";\nexport * from \"./components/DropdownMenu/DropdownMenu\";\nexport * from \"./components/Form/FormFieldGroup/FormFieldGroup\";\nexport * from \"./components/Form/Input\";\nexport * from \"./components/Form/Checkbox/Checkbox\";\nexport * from \"./components/Form/Toggle/Toggle\";\nexport * from \"./components/Form/Radio/Radio\";\nexport * from \"./components/Form/RadioButton/RadioButton\";\nexport * from \"./components/Form/Textarea/Textarea\";\nexport * from \"./components/Form/Select/Select\";\nexport * from \"./components/SubThemeProvider/SubThemeProvider\";\nexport * from \"./components/PictogramButton/PictogramButton\";\nexport * from \"./components/MediaViewerBar/MediaViewerBar\";\nexport * from \"./components/SegmentedProgressBar/SegmentedProgressBar\";\nexport * from \"./components/ProgressBar/ProgressBar\";\nexport * from \"./components/Container/Container\";\nexport * from \"./components/Form/PasswordInput\";\nexport * from \"./components/RoundButton/RoundButton\";\nexport * from \"./components/Notification/Notification\";\nexport * from \"./components/Logo/Logo\";\nexport * from \"./components/MediaItem/MediaItem\";\nexport * from \"./components/Callout/Callout\";\nexport * from \"./components/Patterns/Modal/Modal\";\nexport * from \"./components/Patterns/ButtonGroup/ButtonGroup\";\nexport * from \"./components/Collapsible/Collapsible\";\nexport * from \"./components/LoadingSpinner/LoadingSpinner\";\nexport * from \"./components/Pagination/Pagination\";\nexport * from \"./components/DataTable\";\nexport * from \"./components/Form/SegmentedControl/SegmentedControl\";\nexport * from \"./components/Tooltip/Tooltip\";\n"],"names":["dark","light","ambossVisualConfiguration"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMa,MAAA;EAAEA,IAAI;AAAEC,EAAAA,KAAAA;AAAM,CAAC,GAAGC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amboss/design-system",
3
- "version": "1.13.4",
3
+ "version": "1.13.6",
4
4
  "description": "the design system for AMBOSS products",
5
5
  "author": "Bagrat Gobedashvili",
6
6
  "license": "ISC",
@@ -119,6 +119,7 @@
119
119
  "@babel/preset-react": "^7.14.5",
120
120
  "@babel/preset-typescript": "^7.15.0",
121
121
  "@emotion/babel-plugin": "^11.3.0",
122
+ "@emotion/jest": "^11.11.0",
122
123
  "@geometricpanda/storybook-addon-badges": "2.0.0",
123
124
  "@rollup/plugin-babel": "^6.0.3",
124
125
  "@rollup/plugin-commonjs": "^24.0.1",