@frontify/fondue 12.0.0-beta.380 → 12.0.0-beta.382
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/dist/components/Breadcrumbs/BreadcrumbItem.es.js +13 -13
- package/dist/components/Breadcrumbs/BreadcrumbItem.es.js.map +1 -1
- package/dist/components/Breadcrumbs/CurrentBreadcrumbItem.es.js +5 -5
- package/dist/components/Breadcrumbs/CurrentBreadcrumbItem.es.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.es.js +66 -66
- package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
- package/dist/index.cjs.js +4 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsxs as n, jsx as
|
|
1
|
+
import { jsxs as n, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { useRef as f } from "react";
|
|
3
3
|
import { useBreadcrumbItem as h } from "@react-aria/breadcrumbs";
|
|
4
4
|
import { useFocusRing as g } from "@react-aria/focus";
|
|
@@ -6,7 +6,7 @@ import { mergeProps as b } from "@react-aria/utils";
|
|
|
6
6
|
import { getItemElementType as y } from "../../utilities/elements.es.js";
|
|
7
7
|
import { FOCUS_STYLE_NO_OFFSET as F } from "../../utilities/focusStyle.es.js";
|
|
8
8
|
import { merge as N } from "../../utilities/merge.es.js";
|
|
9
|
-
const T = () => /* @__PURE__ */
|
|
9
|
+
const T = () => /* @__PURE__ */ t(
|
|
10
10
|
"svg",
|
|
11
11
|
{
|
|
12
12
|
"aria-hidden": "true",
|
|
@@ -16,7 +16,7 @@ const T = () => /* @__PURE__ */ e(
|
|
|
16
16
|
fill: "none",
|
|
17
17
|
className: "tw-stroke-current tw-text-black-20",
|
|
18
18
|
xmlns: "http://www.w3.org/2000/svg",
|
|
19
|
-
children: /* @__PURE__ */
|
|
19
|
+
children: /* @__PURE__ */ t("line", { x1: "3.52447", y1: "16.0623", x2: "8.46874", y2: "0.845385" })
|
|
20
20
|
}
|
|
21
21
|
), P = ({
|
|
22
22
|
decorator: i,
|
|
@@ -24,31 +24,31 @@ const T = () => /* @__PURE__ */ e(
|
|
|
24
24
|
link: s,
|
|
25
25
|
onClick: o,
|
|
26
26
|
showSeparator: a,
|
|
27
|
-
children:
|
|
28
|
-
"data-test-id":
|
|
27
|
+
children: c,
|
|
28
|
+
"data-test-id": p = "breadcrumb"
|
|
29
29
|
}) => {
|
|
30
|
-
const m = f(null),
|
|
30
|
+
const m = f(null), e = y(s, o), { itemProps: l } = h(
|
|
31
31
|
{
|
|
32
32
|
isCurrent: !1,
|
|
33
33
|
children: r,
|
|
34
|
-
elementType:
|
|
34
|
+
elementType: e
|
|
35
35
|
},
|
|
36
36
|
m
|
|
37
|
-
), { isFocusVisible:
|
|
38
|
-
"tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-
|
|
39
|
-
|
|
37
|
+
), { isFocusVisible: w, focusProps: d } = g(), u = b(l, d, { a: { href: s }, button: { onClick: o, type: "button" }, span: {} }[e]), x = N([
|
|
38
|
+
"tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-whitespace-pre-wrap tw-rounded",
|
|
39
|
+
w && F
|
|
40
40
|
]);
|
|
41
41
|
return /* @__PURE__ */ n(
|
|
42
42
|
"li",
|
|
43
43
|
{
|
|
44
44
|
className: "tw-flex tw-items-center tw-text-text-weak hover:tw-text-text tw-text-xs tw-transition-colors",
|
|
45
|
-
"data-test-id": `${
|
|
45
|
+
"data-test-id": `${p}-item`,
|
|
46
46
|
children: [
|
|
47
|
-
|
|
47
|
+
c ?? /* @__PURE__ */ n(e, { ref: m, ...u, className: x, children: [
|
|
48
48
|
i,
|
|
49
49
|
r
|
|
50
50
|
] }),
|
|
51
|
-
a && /* @__PURE__ */
|
|
51
|
+
a && /* @__PURE__ */ t(T, {})
|
|
52
52
|
]
|
|
53
53
|
}
|
|
54
54
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbItem.es.js","sources":["../../../src/components/Breadcrumbs/BreadcrumbItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ReactElement, useRef } from 'react';\nimport { useBreadcrumbItem } from '@react-aria/breadcrumbs';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\n\nimport { getItemElementType } from '@utilities/elements';\nimport { FOCUS_STYLE_NO_OFFSET } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\n\nimport { Breadcrumb } from './Breadcrumbs';\n\nconst Separator = () => (\n <svg\n aria-hidden=\"true\"\n width=\"13\"\n height=\"17\"\n viewBox=\"0 0 13 17\"\n fill=\"none\"\n className=\"tw-stroke-current tw-text-black-20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <line x1=\"3.52447\" y1=\"16.0623\" x2=\"8.46874\" y2=\"0.845385\" />\n </svg>\n);\n\ntype BreadcrumbItemProps = Pick<Breadcrumb, 'label' | 'link' | 'onClick' | 'decorator'> & {\n showSeparator: boolean;\n children?: ReactElement;\n 'data-test-id'?: string;\n};\n\nexport const BreadcrumbItem = ({\n decorator,\n label,\n link,\n onClick,\n showSeparator,\n children,\n 'data-test-id': dataTestId = 'breadcrumb',\n}: BreadcrumbItemProps): ReactElement => {\n const ref = useRef(null);\n\n const Element = getItemElementType(link, onClick);\n\n const { itemProps } = useBreadcrumbItem(\n {\n isCurrent: false,\n children: label,\n elementType: Element,\n },\n ref,\n );\n\n const { isFocusVisible, focusProps } = useFocusRing();\n\n const elementTypeProps = { a: { href: link }, button: { onClick, type: 'button' as const }, span: {} };\n const props = mergeProps(itemProps, focusProps, elementTypeProps[Element]);\n\n const classNames = merge([\n 'tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-
|
|
1
|
+
{"version":3,"file":"BreadcrumbItem.es.js","sources":["../../../src/components/Breadcrumbs/BreadcrumbItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ReactElement, useRef } from 'react';\nimport { useBreadcrumbItem } from '@react-aria/breadcrumbs';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\n\nimport { getItemElementType } from '@utilities/elements';\nimport { FOCUS_STYLE_NO_OFFSET } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\n\nimport { Breadcrumb } from './Breadcrumbs';\n\nconst Separator = () => (\n <svg\n aria-hidden=\"true\"\n width=\"13\"\n height=\"17\"\n viewBox=\"0 0 13 17\"\n fill=\"none\"\n className=\"tw-stroke-current tw-text-black-20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <line x1=\"3.52447\" y1=\"16.0623\" x2=\"8.46874\" y2=\"0.845385\" />\n </svg>\n);\n\ntype BreadcrumbItemProps = Pick<Breadcrumb, 'label' | 'link' | 'onClick' | 'decorator'> & {\n showSeparator: boolean;\n children?: ReactElement;\n 'data-test-id'?: string;\n};\n\nexport const BreadcrumbItem = ({\n decorator,\n label,\n link,\n onClick,\n showSeparator,\n children,\n 'data-test-id': dataTestId = 'breadcrumb',\n}: BreadcrumbItemProps): ReactElement => {\n const ref = useRef(null);\n\n const Element = getItemElementType(link, onClick);\n\n const { itemProps } = useBreadcrumbItem(\n {\n isCurrent: false,\n children: label,\n elementType: Element,\n },\n ref,\n );\n\n const { isFocusVisible, focusProps } = useFocusRing();\n\n const elementTypeProps = { a: { href: link }, button: { onClick, type: 'button' as const }, span: {} };\n const props = mergeProps(itemProps, focusProps, elementTypeProps[Element]);\n\n const classNames = merge([\n 'tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-whitespace-pre-wrap tw-rounded',\n isFocusVisible && FOCUS_STYLE_NO_OFFSET,\n ]);\n\n return (\n <li\n className=\"tw-flex tw-items-center tw-text-text-weak hover:tw-text-text tw-text-xs tw-transition-colors\"\n data-test-id={`${dataTestId}-item`}\n >\n {children ?? (\n <Element ref={ref} {...props} className={classNames}>\n {decorator}\n {label}\n </Element>\n )}\n {showSeparator && <Separator />}\n </li>\n );\n};\nBreadcrumbItem.displayName = 'FondueBreadcrumbItem';\n"],"names":["Separator","jsx","BreadcrumbItem","decorator","label","link","onClick","showSeparator","children","dataTestId","ref","useRef","Element","getItemElementType","itemProps","useBreadcrumbItem","isFocusVisible","focusProps","useFocusRing","props","mergeProps","classNames","merge","FOCUS_STYLE_NO_OFFSET","jsxs"],"mappings":";;;;;;;;AAaA,MAAMA,IAAY,MACd,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,eAAY;AAAA,IACZ,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,WAAU;AAAA,IACV,OAAM;AAAA,IAEN,UAAA,gBAAAA,EAAC,UAAK,IAAG,WAAU,IAAG,WAAU,IAAG,WAAU,IAAG,WAAW,CAAA;AAAA,EAAA;AAC/D,GASSC,IAAiB,CAAC;AAAA,EAC3B,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAgBC,IAAa;AACjC,MAAyC;AAC/B,QAAAC,IAAMC,EAAO,IAAI,GAEjBC,IAAUC,EAAmBR,GAAMC,CAAO,GAE1C,EAAE,WAAAQ,MAAcC;AAAA,IAClB;AAAA,MACI,WAAW;AAAA,MACX,UAAUX;AAAA,MACV,aAAaQ;AAAA,IACjB;AAAA,IACAF;AAAA,EAAA,GAGE,EAAE,gBAAAM,GAAgB,YAAAC,EAAW,IAAIC,EAAa,GAG9CC,IAAQC,EAAWN,GAAWG,GADX,EAAE,GAAG,EAAE,MAAMZ,EAAK,GAAG,QAAQ,EAAE,SAAAC,GAAS,MAAM,SAAqB,GAAA,MAAM,CAAG,EAAA,EACpCM,CAAO,CAAC,GAEnES,IAAaC,EAAM;AAAA,IACrB;AAAA,IACAN,KAAkBO;AAAA,EAAA,CACrB;AAGG,SAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,gBAAc,GAAGf,CAAU;AAAA,MAE1B,UAAA;AAAA,QAAAD,uBACII,GAAQ,EAAA,KAAAF,GAAW,GAAGS,GAAO,WAAWE,GACpC,UAAA;AAAA,UAAAlB;AAAA,UACAC;AAAA,QAAA,GACL;AAAA,QAEHG,uBAAkBP,GAAU,EAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGzC;AACAE,EAAe,cAAc;"}
|
|
@@ -15,17 +15,17 @@ const O = ({
|
|
|
15
15
|
link: m,
|
|
16
16
|
onClick: o,
|
|
17
17
|
activeInline: s,
|
|
18
|
-
"data-test-id":
|
|
18
|
+
"data-test-id": u = "breadcrumb"
|
|
19
19
|
}) => {
|
|
20
|
-
const n = F(null), e = C(m, o), { itemProps:
|
|
20
|
+
const n = F(null), e = C(m, o), { itemProps: l } = N(
|
|
21
21
|
{
|
|
22
22
|
isCurrent: !0,
|
|
23
23
|
children: r,
|
|
24
24
|
elementType: e
|
|
25
25
|
},
|
|
26
26
|
n
|
|
27
|
-
),
|
|
28
|
-
"tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-
|
|
27
|
+
), w = { a: { href: m }, button: { onClick: o, type: "button" }, span: {} }, { isFocusVisible: d, focusProps: f } = T(), x = B(l, f, w[e]), b = p([
|
|
28
|
+
"tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-whitespace-pre-wrap tw-font-medium tw-rounded",
|
|
29
29
|
c && "tw-font-bold",
|
|
30
30
|
s && "tw-text-xs",
|
|
31
31
|
d && P
|
|
@@ -37,7 +37,7 @@ const O = ({
|
|
|
37
37
|
"tw-align-middle tw-gap-x-1 tw-text-m tw-text-text tw-items-center",
|
|
38
38
|
s ? "tw-flex tw-items-center" : "tw-w-full tw-inline-flex"
|
|
39
39
|
]),
|
|
40
|
-
"data-test-id": `${
|
|
40
|
+
"data-test-id": `${u}-item`,
|
|
41
41
|
children: [
|
|
42
42
|
/* @__PURE__ */ i(e, { ref: n, ...x, className: b, children: [
|
|
43
43
|
a,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentBreadcrumbItem.es.js","sources":["../../../src/components/Breadcrumbs/CurrentBreadcrumbItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ReactElement, useRef } from 'react';\nimport { useBreadcrumbItem } from '@react-aria/breadcrumbs';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\n\nimport { Badge } from '@components/Badge';\nimport { FOCUS_STYLE_NO_OFFSET } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { getItemElementType } from '@utilities/elements';\n\nimport { Breadcrumb } from './Breadcrumbs';\n\ntype CurrentBreadcrumbItemProps = Breadcrumb;\n\nexport const CurrentBreadcrumbItem = ({\n label,\n badges,\n bold,\n decorator,\n link,\n onClick,\n activeInline,\n 'data-test-id': dataTestId = 'breadcrumb',\n}: CurrentBreadcrumbItemProps): ReactElement => {\n const ref = useRef(null);\n const Element = getItemElementType(link, onClick);\n const { itemProps } = useBreadcrumbItem(\n {\n isCurrent: true,\n children: label,\n elementType: Element,\n },\n ref,\n );\n\n const elementTypeProps = { a: { href: link }, button: { onClick, type: 'button' as const }, span: {} };\n\n const { isFocusVisible, focusProps } = useFocusRing();\n const props = mergeProps(itemProps, focusProps, elementTypeProps[Element]);\n\n const classNames = merge([\n 'tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-
|
|
1
|
+
{"version":3,"file":"CurrentBreadcrumbItem.es.js","sources":["../../../src/components/Breadcrumbs/CurrentBreadcrumbItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ReactElement, useRef } from 'react';\nimport { useBreadcrumbItem } from '@react-aria/breadcrumbs';\nimport { useFocusRing } from '@react-aria/focus';\nimport { mergeProps } from '@react-aria/utils';\n\nimport { Badge } from '@components/Badge';\nimport { FOCUS_STYLE_NO_OFFSET } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { getItemElementType } from '@utilities/elements';\n\nimport { Breadcrumb } from './Breadcrumbs';\n\ntype CurrentBreadcrumbItemProps = Breadcrumb;\n\nexport const CurrentBreadcrumbItem = ({\n label,\n badges,\n bold,\n decorator,\n link,\n onClick,\n activeInline,\n 'data-test-id': dataTestId = 'breadcrumb',\n}: CurrentBreadcrumbItemProps): ReactElement => {\n const ref = useRef(null);\n const Element = getItemElementType(link, onClick);\n const { itemProps } = useBreadcrumbItem(\n {\n isCurrent: true,\n children: label,\n elementType: Element,\n },\n ref,\n );\n\n const elementTypeProps = { a: { href: link }, button: { onClick, type: 'button' as const }, span: {} };\n\n const { isFocusVisible, focusProps } = useFocusRing();\n const props = mergeProps(itemProps, focusProps, elementTypeProps[Element]);\n\n const classNames = merge([\n 'tw-flex tw-gap-x-1 tw-items-center tw-leading-4 tw-h-6 tw-whitespace-pre-wrap tw-font-medium tw-rounded',\n bold && 'tw-font-bold',\n activeInline && 'tw-text-xs',\n isFocusVisible && FOCUS_STYLE_NO_OFFSET,\n ]);\n\n return (\n <li\n className={merge([\n 'tw-align-middle tw-gap-x-1 tw-text-m tw-text-text tw-items-center',\n activeInline ? 'tw-flex tw-items-center' : 'tw-w-full tw-inline-flex',\n ])}\n data-test-id={`${dataTestId}-item`}\n >\n <Element ref={ref} {...props} className={classNames}>\n {decorator}\n {label}\n </Element>\n {badges?.map(({ children: badge, ...props }, index) => (\n <Badge {...props} key={`breadcrumb-badge-${index}`}>\n {badge}\n </Badge>\n ))}\n </li>\n );\n};\nCurrentBreadcrumbItem.displayName = 'FondueCurrentBreadcrumbItem';\n"],"names":["CurrentBreadcrumbItem","label","badges","bold","decorator","link","onClick","activeInline","dataTestId","ref","useRef","Element","getItemElementType","itemProps","useBreadcrumbItem","elementTypeProps","isFocusVisible","focusProps","useFocusRing","props","mergeProps","classNames","merge","FOCUS_STYLE_NO_OFFSET","jsxs","badge","index","createElement","Badge"],"mappings":";;;;;;;;;AAgBO,MAAMA,IAAwB,CAAC;AAAA,EAClC,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAgBC,IAAa;AACjC,MAAgD;AACtC,QAAAC,IAAMC,EAAO,IAAI,GACjBC,IAAUC,EAAmBP,GAAMC,CAAO,GAC1C,EAAE,WAAAO,MAAcC;AAAA,IAClB;AAAA,MACI,WAAW;AAAA,MACX,UAAUb;AAAA,MACV,aAAaU;AAAA,IACjB;AAAA,IACAF;AAAA,EAAA,GAGEM,IAAmB,EAAE,GAAG,EAAE,MAAMV,EAAK,GAAG,QAAQ,EAAE,SAAAC,GAAS,MAAM,SAAqB,GAAA,MAAM,CAAG,EAAA,GAE/F,EAAE,gBAAAU,GAAgB,YAAAC,EAAW,IAAIC,EAAa,GAC9CC,IAAQC,EAAWP,GAAWI,GAAYF,EAAiBJ,CAAO,CAAC,GAEnEU,IAAaC,EAAM;AAAA,IACrB;AAAA,IACAnB,KAAQ;AAAA,IACRI,KAAgB;AAAA,IAChBS,KAAkBO;AAAA,EAAA,CACrB;AAGG,SAAA,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAWF,EAAM;AAAA,QACb;AAAA,QACAf,IAAe,4BAA4B;AAAA,MAAA,CAC9C;AAAA,MACD,gBAAc,GAAGC,CAAU;AAAA,MAE3B,UAAA;AAAA,QAAA,gBAAAgB,EAACb,GAAQ,EAAA,KAAAF,GAAW,GAAGU,GAAO,WAAWE,GACpC,UAAA;AAAA,UAAAjB;AAAA,UACAH;AAAA,QAAA,GACL;AAAA,QACCC,KAAA,gBAAAA,EAAQ,IAAI,CAAC,EAAE,UAAUuB,GAAO,GAAGN,EAAM,GAAGO,MACxC,gBAAAC,EAAAC,GAAA,EAAO,GAAGT,GAAO,KAAK,oBAAoBO,CAAK,GAAA,GAC3CD,CACL;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGb;AACAzB,EAAsB,cAAc;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
1
|
+
import { jsxs as O, Fragment as H, jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { useState as l, useRef as Z, useEffect as R, useCallback as y } from "react";
|
|
3
3
|
import { usePopper as q } from "react-popper";
|
|
4
|
-
import { merge as
|
|
4
|
+
import { merge as N } from "../../utilities/merge.es.js";
|
|
5
5
|
import { useToggleOverlay as G } from "../../hooks/useToggleOverlay.es.js";
|
|
6
6
|
import { Z_INDEX_TOOLTIP as J } from "../../utilities/dialogs/constants.es.js";
|
|
7
7
|
import { EnablePortalWrapper as K } from "../../utilities/dialogs/EnablePortalWrapper.es.js";
|
|
8
8
|
import { useMemoizedId as Q } from "../../hooks/useMemoizedId.es.js";
|
|
9
|
-
const Y = 12,
|
|
9
|
+
const Y = 12, _ = 7, D = (e) => {
|
|
10
10
|
switch (!0) {
|
|
11
11
|
case e.includes("top"):
|
|
12
12
|
return "before:tw-border-t-0 before:tw-border-l-0 tw-bottom-[-6px]";
|
|
@@ -26,100 +26,100 @@ const Y = 12, y = 7, D = (e) => {
|
|
|
26
26
|
}, te = (e, t) => {
|
|
27
27
|
switch (!0) {
|
|
28
28
|
case e.includes("end"):
|
|
29
|
-
return [t[0] +
|
|
29
|
+
return [t[0] + _, t[1]];
|
|
30
30
|
case e.includes("start"):
|
|
31
|
-
return [t[0] -
|
|
31
|
+
return [t[0] - _, t[1]];
|
|
32
32
|
default:
|
|
33
33
|
return t;
|
|
34
34
|
}
|
|
35
35
|
}, re = ({
|
|
36
36
|
id: e,
|
|
37
37
|
children: t,
|
|
38
|
-
offset:
|
|
39
|
-
flip:
|
|
40
|
-
content:
|
|
41
|
-
placement:
|
|
42
|
-
withArrow:
|
|
43
|
-
size:
|
|
44
|
-
openOnMount:
|
|
45
|
-
maxWidth:
|
|
46
|
-
maxHeight:
|
|
47
|
-
enablePortal:
|
|
48
|
-
enterDelay:
|
|
49
|
-
leaveDelay:
|
|
50
|
-
disabled:
|
|
51
|
-
zIndex:
|
|
52
|
-
"data-test-id":
|
|
53
|
-
"aria-label":
|
|
38
|
+
offset: a = [0, 8],
|
|
39
|
+
flip: A = !0,
|
|
40
|
+
content: F,
|
|
41
|
+
placement: c = "bottom",
|
|
42
|
+
withArrow: f = !0,
|
|
43
|
+
size: v = "spacious",
|
|
44
|
+
openOnMount: L = !1,
|
|
45
|
+
maxWidth: S = 200,
|
|
46
|
+
maxHeight: C = "auto",
|
|
47
|
+
enablePortal: M = !0,
|
|
48
|
+
enterDelay: u = 0,
|
|
49
|
+
leaveDelay: m = 200,
|
|
50
|
+
disabled: h = !1,
|
|
51
|
+
zIndex: j = J,
|
|
52
|
+
"data-test-id": p = "fondue-tooltip",
|
|
53
|
+
"aria-label": k = "fondue-tooltip-trigger"
|
|
54
54
|
}) => {
|
|
55
|
-
const
|
|
56
|
-
placement:
|
|
55
|
+
const g = Q(e), [n, o] = G(L), [B, I] = l(null), [P, U] = l(null), [V, W] = l(null), [i, X] = l(a), { styles: x, attributes: $, state: d } = q(B, P, {
|
|
56
|
+
placement: c,
|
|
57
57
|
modifiers: [
|
|
58
|
-
{ name: "arrow", options: { element:
|
|
59
|
-
{ name: "offset", options: { offset:
|
|
60
|
-
{ name: "flip", enabled:
|
|
58
|
+
{ name: "arrow", options: { element: V, padding: Y } },
|
|
59
|
+
{ name: "offset", options: { offset: i } },
|
|
60
|
+
{ name: "flip", enabled: A }
|
|
61
61
|
]
|
|
62
|
-
}),
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
}, [
|
|
67
|
-
const
|
|
68
|
-
r.current && clearTimeout(r.current), r.current = setTimeout(() => o(!1),
|
|
69
|
-
}, [
|
|
70
|
-
if (r.current && clearTimeout(r.current),
|
|
71
|
-
r.current = setTimeout(() => o(!0),
|
|
62
|
+
}), b = (d == null ? void 0 : d.placement) ?? c, z = D(b), r = Z(null);
|
|
63
|
+
R(() => {
|
|
64
|
+
const w = te(b, a);
|
|
65
|
+
(w[0] !== i[0] || w[1] !== i[1]) && X(w);
|
|
66
|
+
}, [a, i, b]);
|
|
67
|
+
const T = y(() => {
|
|
68
|
+
r.current && clearTimeout(r.current), r.current = setTimeout(() => o(!1), m);
|
|
69
|
+
}, [m, o]), E = y(() => {
|
|
70
|
+
if (r.current && clearTimeout(r.current), u) {
|
|
71
|
+
r.current = setTimeout(() => o(!0), u);
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
o(!0);
|
|
75
|
-
}, [
|
|
76
|
-
return
|
|
75
|
+
}, [u, o]);
|
|
76
|
+
return R(() => {
|
|
77
77
|
r.current && !n && clearTimeout(r.current);
|
|
78
|
-
}, [n]), /* @__PURE__ */
|
|
78
|
+
}, [n]), /* @__PURE__ */ O(H, { children: [
|
|
79
79
|
/* @__PURE__ */ s(
|
|
80
80
|
"button",
|
|
81
81
|
{
|
|
82
|
-
ref:
|
|
83
|
-
onMouseEnter:
|
|
84
|
-
onFocus:
|
|
85
|
-
onMouseLeave:
|
|
86
|
-
onBlur:
|
|
87
|
-
"aria-label":
|
|
88
|
-
"aria-disabled":
|
|
89
|
-
"aria-describedby":
|
|
90
|
-
disabled:
|
|
82
|
+
ref: I,
|
|
83
|
+
onMouseEnter: E,
|
|
84
|
+
onFocus: E,
|
|
85
|
+
onMouseLeave: T,
|
|
86
|
+
onBlur: T,
|
|
87
|
+
"aria-label": k,
|
|
88
|
+
"aria-disabled": h,
|
|
89
|
+
"aria-describedby": g,
|
|
90
|
+
disabled: h,
|
|
91
91
|
className: "disabled:tw-text-text-disabled",
|
|
92
|
-
"data-test-id": `${
|
|
92
|
+
"data-test-id": `${p}-button`,
|
|
93
93
|
children: t
|
|
94
94
|
}
|
|
95
95
|
),
|
|
96
|
-
n && /* @__PURE__ */ s(K, { enablePortal:
|
|
96
|
+
n && /* @__PURE__ */ s(K, { enablePortal: M, children: /* @__PURE__ */ O(
|
|
97
97
|
"div",
|
|
98
98
|
{
|
|
99
|
-
"data-test-id":
|
|
99
|
+
"data-test-id": p,
|
|
100
100
|
role: "tooltip",
|
|
101
|
-
id:
|
|
101
|
+
id: g,
|
|
102
102
|
"aria-hidden": !n,
|
|
103
|
-
ref:
|
|
104
|
-
className:
|
|
103
|
+
ref: U,
|
|
104
|
+
className: N([
|
|
105
105
|
"tw-popper-container tw-inline-block tw-bg-box-neutral-mighty tw-rounded-md tw-shadow tw-text-heading-medium tw-text-box-neutral-mighty-inverse tw-border tw-border-line-mighty",
|
|
106
|
-
|
|
106
|
+
v === "spacious" ? "tw-pt-2 tw-px-3 tw-pb-2.5" : "tw-pt-1 tw-px-2 tw-pb-1.5"
|
|
107
107
|
]),
|
|
108
|
-
style: { ...
|
|
109
|
-
|
|
108
|
+
style: { ...x.popper, maxWidth: S, maxHeight: C, zIndex: j },
|
|
109
|
+
...$.popper,
|
|
110
110
|
children: [
|
|
111
|
-
/* @__PURE__ */ s("p", { className: "tw-whitespace-pre-line", children: ee(
|
|
112
|
-
|
|
111
|
+
/* @__PURE__ */ s("p", { className: "tw-whitespace-pre-line", children: ee(F) }),
|
|
112
|
+
f && /* @__PURE__ */ s(
|
|
113
113
|
"div",
|
|
114
114
|
{
|
|
115
|
-
"data-test-id": `${
|
|
116
|
-
"data-popper-arrow":
|
|
115
|
+
"data-test-id": `${p}-arrow`,
|
|
116
|
+
"data-popper-arrow": f,
|
|
117
117
|
"aria-hidden": "true",
|
|
118
|
-
ref:
|
|
119
|
-
style:
|
|
120
|
-
className:
|
|
118
|
+
ref: W,
|
|
119
|
+
style: x.arrow,
|
|
120
|
+
className: N([
|
|
121
121
|
"tw-absolute tw-w-3 tw-h-3 tw-pointer-events-none before:tw-absolute before:tw-w-3 before:tw-h-3 before:tw-rotate-45 before:tw-border before:tw-border-line-mighty before:tw-bg-box-neutral-mighty",
|
|
122
|
-
|
|
122
|
+
z
|
|
123
123
|
])
|
|
124
124
|
}
|
|
125
125
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.es.js","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\nimport { PopperPlacement } from '@components/Popper';\nimport { usePopper } from 'react-popper';\nimport { merge } from '@utilities/merge';\nimport { useToggleOverlay } from '@hooks/useToggleOverlay';\nimport { Z_INDEX_TOOLTIP } from '@utilities/dialogs/constants';\nimport { EnablePortalWrapper } from '@utilities/dialogs/EnablePortalWrapper';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\n\nconst ARROW_DISTANCE_FROM_CORNER_VALUE = 12;\nconst TOOLTIP_EXTRA_OFFSET_VALUE = 7; // As the arrow is set 12px away from tooltip corner, extra offset should be added to still point to Trigger.\n\nexport type TooltipProps = {\n id?: string;\n children?: ReactElement;\n openOnMount?: boolean;\n placement?: PopperPlacement;\n offset?: [number, number];\n flip?: boolean;\n enablePortal?: boolean;\n content: string;\n withArrow?: boolean;\n size?: 'spacious' | 'compact';\n maxWidth?: string | number;\n maxHeight?: string | number;\n enterDelay?: number;\n leaveDelay?: number;\n 'data-test-id'?: string;\n zIndex?: number;\n disabled?: boolean;\n 'aria-label'?: string;\n};\n\nconst getArrowClasses = (currentPlacement: string) => {\n switch (true) {\n case currentPlacement.includes('top'):\n return 'before:tw-border-t-0 before:tw-border-l-0 tw-bottom-[-6px]';\n case currentPlacement.includes('right'):\n return 'before:tw-border-t-0 before:tw-border-r-0 tw-left-[-6px]';\n case currentPlacement.includes('bottom'):\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]';\n case currentPlacement.includes('left'):\n return 'before:tw-border-b-0 before:tw-border-l-0 tw-right-[-6px]';\n default:\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]';\n }\n};\n\nconst formatTooltipText = (text: string) => {\n const lineBreakRegex = /<br\\s*\\/?>/;\n return text.split(lineBreakRegex).join('\\n');\n};\n\nconst getNewOffsetBasedOnArrowPosition = (currentPlacement: string, offset: [number, number]): [number, number] => {\n switch (true) {\n case currentPlacement.includes('end'):\n return [offset[0] + TOOLTIP_EXTRA_OFFSET_VALUE, offset[1]];\n case currentPlacement.includes('start'):\n return [offset[0] - TOOLTIP_EXTRA_OFFSET_VALUE, offset[1]];\n default:\n return offset;\n }\n};\n\nexport const Tooltip = ({\n id: customId,\n children,\n offset = [0, 8],\n flip = true,\n content,\n placement = 'bottom',\n withArrow = true,\n size = 'spacious',\n openOnMount = false,\n maxWidth = 200,\n maxHeight = 'auto',\n enablePortal = true,\n enterDelay = 0,\n leaveDelay = 200,\n disabled = false,\n zIndex = Z_INDEX_TOOLTIP,\n 'data-test-id': dataTestId = 'fondue-tooltip',\n 'aria-label': ariaLabel = 'fondue-tooltip-trigger',\n}: TooltipProps) => {\n const id = useMemoizedId(customId);\n const [open, setOpen] = useToggleOverlay(openOnMount);\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null);\n const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null);\n const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);\n const [tooltipOffset, setTooltipOffset] = useState<[number, number]>(offset);\n\n const { styles, attributes, state } = usePopper(referenceElement, popperElement, {\n placement,\n modifiers: [\n { name: 'arrow', options: { element: arrowElement, padding: ARROW_DISTANCE_FROM_CORNER_VALUE } },\n { name: 'offset', options: { offset: tooltipOffset } },\n { name: 'flip', enabled: flip },\n ],\n });\n\n const currentPlacement = state?.placement ?? placement;\n const arrowStyling = getArrowClasses(currentPlacement);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const newOffset = getNewOffsetBasedOnArrowPosition(currentPlacement, offset);\n setTooltipOffset(newOffset);\n }, [currentPlacement, offset]);\n\n const handleHideTooltip = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => setOpen(false), leaveDelay);\n }, [leaveDelay, setOpen]);\n\n const handleShowTooltip = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (enterDelay) {\n timeoutRef.current = setTimeout(() => setOpen(true), enterDelay);\n return;\n }\n\n setOpen(true);\n }, [enterDelay, setOpen]);\n\n useEffect(() => {\n if (timeoutRef.current && !open) {\n clearTimeout(timeoutRef.current);\n }\n }, [open]);\n\n return (\n <>\n <button\n ref={setReferenceElement}\n onMouseEnter={handleShowTooltip}\n onFocus={handleShowTooltip}\n onMouseLeave={handleHideTooltip}\n onBlur={handleHideTooltip}\n aria-label={ariaLabel}\n aria-disabled={disabled}\n aria-describedby={id}\n disabled={disabled}\n className=\"disabled:tw-text-text-disabled\"\n data-test-id={`${dataTestId}-button`}\n >\n {children}\n </button>\n {open && (\n <EnablePortalWrapper enablePortal={enablePortal}>\n <div\n data-test-id={dataTestId}\n role=\"tooltip\"\n id={id}\n aria-hidden={!open}\n ref={setPopperElement}\n className={merge([\n 'tw-popper-container tw-inline-block tw-bg-box-neutral-mighty tw-rounded-md tw-shadow tw-text-heading-medium tw-text-box-neutral-mighty-inverse tw-border tw-border-line-mighty',\n size === 'spacious' ? 'tw-pt-2 tw-px-3 tw-pb-2.5' : 'tw-pt-1 tw-px-2 tw-pb-1.5',\n ])}\n style={{ ...styles.popper, maxWidth, maxHeight, zIndex }}\n {...attributes.popper}\n >\n <p className=\"tw-whitespace-pre-line\">{formatTooltipText(content)}</p>\n {withArrow && (\n <div\n data-test-id={`${dataTestId}-arrow`}\n data-popper-arrow={withArrow}\n aria-hidden=\"true\"\n ref={setArrowElement}\n style={styles.arrow}\n className={merge([\n 'tw-absolute tw-w-3 tw-h-3 tw-pointer-events-none before:tw-absolute before:tw-w-3 before:tw-h-3 before:tw-rotate-45 before:tw-border before:tw-border-line-mighty before:tw-bg-box-neutral-mighty',\n arrowStyling,\n ])}\n />\n )}\n </div>\n </EnablePortalWrapper>\n )}\n </>\n );\n};\nTooltip.displayName = 'FondueTooltip';\n"],"names":["ARROW_DISTANCE_FROM_CORNER_VALUE","TOOLTIP_EXTRA_OFFSET_VALUE","getArrowClasses","currentPlacement","formatTooltipText","text","lineBreakRegex","getNewOffsetBasedOnArrowPosition","offset","Tooltip","customId","children","flip","content","placement","withArrow","size","openOnMount","maxWidth","maxHeight","enablePortal","enterDelay","leaveDelay","disabled","zIndex","Z_INDEX_TOOLTIP","dataTestId","ariaLabel","id","useMemoizedId","open","setOpen","useToggleOverlay","referenceElement","setReferenceElement","useState","popperElement","setPopperElement","arrowElement","setArrowElement","tooltipOffset","setTooltipOffset","styles","attributes","state","usePopper","arrowStyling","timeoutRef","useRef","useEffect","newOffset","handleHideTooltip","useCallback","handleShowTooltip","jsxs","Fragment","jsx","EnablePortalWrapper","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tooltip.es.js","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ReactElement, useCallback, useEffect, useRef, useState } from 'react';\nimport { PopperPlacement } from '@components/Popper';\nimport { usePopper } from 'react-popper';\nimport { merge } from '@utilities/merge';\nimport { useToggleOverlay } from '@hooks/useToggleOverlay';\nimport { Z_INDEX_TOOLTIP } from '@utilities/dialogs/constants';\nimport { EnablePortalWrapper } from '@utilities/dialogs/EnablePortalWrapper';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\n\nconst ARROW_DISTANCE_FROM_CORNER_VALUE = 12;\nconst TOOLTIP_EXTRA_OFFSET_VALUE = 7; // As the arrow is set 12px away from tooltip corner, extra offset should be added to still point to Trigger.\n\nexport type TooltipProps = {\n id?: string;\n children?: ReactElement;\n openOnMount?: boolean;\n placement?: PopperPlacement;\n offset?: [number, number];\n flip?: boolean;\n enablePortal?: boolean;\n content: string;\n withArrow?: boolean;\n size?: 'spacious' | 'compact';\n maxWidth?: string | number;\n maxHeight?: string | number;\n enterDelay?: number;\n leaveDelay?: number;\n 'data-test-id'?: string;\n zIndex?: number;\n disabled?: boolean;\n 'aria-label'?: string;\n};\n\nconst getArrowClasses = (currentPlacement: string) => {\n switch (true) {\n case currentPlacement.includes('top'):\n return 'before:tw-border-t-0 before:tw-border-l-0 tw-bottom-[-6px]';\n case currentPlacement.includes('right'):\n return 'before:tw-border-t-0 before:tw-border-r-0 tw-left-[-6px]';\n case currentPlacement.includes('bottom'):\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]';\n case currentPlacement.includes('left'):\n return 'before:tw-border-b-0 before:tw-border-l-0 tw-right-[-6px]';\n default:\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]';\n }\n};\n\nconst formatTooltipText = (text: string) => {\n const lineBreakRegex = /<br\\s*\\/?>/;\n return text.split(lineBreakRegex).join('\\n');\n};\n\nconst getNewOffsetBasedOnArrowPosition = (currentPlacement: string, offset: [number, number]): [number, number] => {\n switch (true) {\n case currentPlacement.includes('end'):\n return [offset[0] + TOOLTIP_EXTRA_OFFSET_VALUE, offset[1]];\n case currentPlacement.includes('start'):\n return [offset[0] - TOOLTIP_EXTRA_OFFSET_VALUE, offset[1]];\n default:\n return offset;\n }\n};\n\nexport const Tooltip = ({\n id: customId,\n children,\n offset = [0, 8],\n flip = true,\n content,\n placement = 'bottom',\n withArrow = true,\n size = 'spacious',\n openOnMount = false,\n maxWidth = 200,\n maxHeight = 'auto',\n enablePortal = true,\n enterDelay = 0,\n leaveDelay = 200,\n disabled = false,\n zIndex = Z_INDEX_TOOLTIP,\n 'data-test-id': dataTestId = 'fondue-tooltip',\n 'aria-label': ariaLabel = 'fondue-tooltip-trigger',\n}: TooltipProps) => {\n const id = useMemoizedId(customId);\n const [open, setOpen] = useToggleOverlay(openOnMount);\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null);\n const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null);\n const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);\n const [tooltipOffset, setTooltipOffset] = useState<[number, number]>(offset);\n\n const { styles, attributes, state } = usePopper(referenceElement, popperElement, {\n placement,\n modifiers: [\n { name: 'arrow', options: { element: arrowElement, padding: ARROW_DISTANCE_FROM_CORNER_VALUE } },\n { name: 'offset', options: { offset: tooltipOffset } },\n { name: 'flip', enabled: flip },\n ],\n });\n\n const currentPlacement = state?.placement ?? placement;\n const arrowStyling = getArrowClasses(currentPlacement);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n const newOffset = getNewOffsetBasedOnArrowPosition(currentPlacement, offset);\n\n if (newOffset[0] !== tooltipOffset[0] || newOffset[1] !== tooltipOffset[1]) {\n setTooltipOffset(newOffset);\n }\n }, [offset, tooltipOffset, currentPlacement]);\n\n const handleHideTooltip = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => setOpen(false), leaveDelay);\n }, [leaveDelay, setOpen]);\n\n const handleShowTooltip = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (enterDelay) {\n timeoutRef.current = setTimeout(() => setOpen(true), enterDelay);\n return;\n }\n\n setOpen(true);\n }, [enterDelay, setOpen]);\n\n useEffect(() => {\n if (timeoutRef.current && !open) {\n clearTimeout(timeoutRef.current);\n }\n }, [open]);\n\n return (\n <>\n <button\n ref={setReferenceElement}\n onMouseEnter={handleShowTooltip}\n onFocus={handleShowTooltip}\n onMouseLeave={handleHideTooltip}\n onBlur={handleHideTooltip}\n aria-label={ariaLabel}\n aria-disabled={disabled}\n aria-describedby={id}\n disabled={disabled}\n className=\"disabled:tw-text-text-disabled\"\n data-test-id={`${dataTestId}-button`}\n >\n {children}\n </button>\n {open && (\n <EnablePortalWrapper enablePortal={enablePortal}>\n <div\n data-test-id={dataTestId}\n role=\"tooltip\"\n id={id}\n aria-hidden={!open}\n ref={setPopperElement}\n className={merge([\n 'tw-popper-container tw-inline-block tw-bg-box-neutral-mighty tw-rounded-md tw-shadow tw-text-heading-medium tw-text-box-neutral-mighty-inverse tw-border tw-border-line-mighty',\n size === 'spacious' ? 'tw-pt-2 tw-px-3 tw-pb-2.5' : 'tw-pt-1 tw-px-2 tw-pb-1.5',\n ])}\n style={{ ...styles.popper, maxWidth, maxHeight, zIndex }}\n {...attributes.popper}\n >\n <p className=\"tw-whitespace-pre-line\">{formatTooltipText(content)}</p>\n {withArrow && (\n <div\n data-test-id={`${dataTestId}-arrow`}\n data-popper-arrow={withArrow}\n aria-hidden=\"true\"\n ref={setArrowElement}\n style={styles.arrow}\n className={merge([\n 'tw-absolute tw-w-3 tw-h-3 tw-pointer-events-none before:tw-absolute before:tw-w-3 before:tw-h-3 before:tw-rotate-45 before:tw-border before:tw-border-line-mighty before:tw-bg-box-neutral-mighty',\n arrowStyling,\n ])}\n />\n )}\n </div>\n </EnablePortalWrapper>\n )}\n </>\n );\n};\nTooltip.displayName = 'FondueTooltip';\n"],"names":["ARROW_DISTANCE_FROM_CORNER_VALUE","TOOLTIP_EXTRA_OFFSET_VALUE","getArrowClasses","currentPlacement","formatTooltipText","text","lineBreakRegex","getNewOffsetBasedOnArrowPosition","offset","Tooltip","customId","children","flip","content","placement","withArrow","size","openOnMount","maxWidth","maxHeight","enablePortal","enterDelay","leaveDelay","disabled","zIndex","Z_INDEX_TOOLTIP","dataTestId","ariaLabel","id","useMemoizedId","open","setOpen","useToggleOverlay","referenceElement","setReferenceElement","useState","popperElement","setPopperElement","arrowElement","setArrowElement","tooltipOffset","setTooltipOffset","styles","attributes","state","usePopper","arrowStyling","timeoutRef","useRef","useEffect","newOffset","handleHideTooltip","useCallback","handleShowTooltip","jsxs","Fragment","jsx","EnablePortalWrapper","merge"],"mappings":"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"}
|