@frontify/fondue 12.0.0-beta.224 → 12.0.0-beta.225
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/RichTextEditor/serializer/utils/serializeLeafToHtml.es.js +6 -6
- package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.es.js.map +1 -1
- package/dist/components/Tabs/TabItem.es.js +17 -15
- package/dist/components/Tabs/TabItem.es.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.es.js +47 -47
- package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
- package/dist/index.cjs.js +2 -2
- 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,15 +1,15 @@
|
|
|
1
1
|
import n from "escape-html";
|
|
2
2
|
import { BOLD_CLASSES as S } from "../../Plugins/BoldPlugin/BoldMarkupElement.es.js";
|
|
3
|
-
import { ITALIC_CLASSES as
|
|
4
|
-
import { UNDERLINE_CLASSES as
|
|
5
|
-
import { STRIKETHROUGH_CLASSES as
|
|
6
|
-
import { CODE_CLASSES as
|
|
3
|
+
import { ITALIC_CLASSES as f } from "../../Plugins/ItalicPlugin/ItalicMarkupElement.es.js";
|
|
4
|
+
import { UNDERLINE_CLASSES as m } from "../../Plugins/UnderlinePlugin/UnderlineMarkupElement.es.js";
|
|
5
|
+
import { STRIKETHROUGH_CLASSES as c } from "../../Plugins/StrikethroughPlugin/StrikethroughMarkupElement.es.js";
|
|
6
|
+
import { CODE_CLASSES as $ } from "../../Plugins/CodePlugin/CodeMarkupElement.es.js";
|
|
7
7
|
const _ = (r) => {
|
|
8
8
|
let s = n(r.text);
|
|
9
9
|
s = s.replaceAll(`
|
|
10
10
|
`, "<br />");
|
|
11
|
-
const { bold:
|
|
12
|
-
return
|
|
11
|
+
const { bold: p, italic: i, underline: t, strikethrough: a, code: o, subscript: e, superscript: l } = r;
|
|
12
|
+
return p && (s = `<span class="${S}">${s}</span>`), i && (s = `<span class="${f}">${s}</span>`), t && (s = `<span class="${m}">${s}</span>`), a && (s = `<span class="${c}">${s}</span>`), o && (s = `<span class="${$}">${s}</span>`), e ? s = `<sub>${s}</sub>` : l && (s = `<sup>${s}</sup>`), s;
|
|
13
13
|
};
|
|
14
14
|
export {
|
|
15
15
|
_ as serializeLeafToHtml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializeLeafToHtml.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utils/serializeLeafToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n BOLD_CLASSES,\n CODE_CLASSES,\n ITALIC_CLASSES,\n STRIKETHROUGH_CLASSES,\n UNDERLINE_CLASSES,\n} from '@components/RichTextEditor/Plugins';\nimport { TText } from '@udecode/plate';\nimport escapeHtml from 'escape-html';\n\nexport const serializeLeafToHtml = (node: TText): string => {\n let string = escapeHtml(node.text);\n string = string.replaceAll('\\n', '<br />');\n const { bold, italic, underline, strikethrough, code } = node;\n if (bold) {\n string = `<span class=\"${BOLD_CLASSES}\">${string}</span>`;\n }\n if (italic) {\n string = `<span class=\"${ITALIC_CLASSES}\">${string}</span>`;\n }\n if (underline) {\n string = `<span class=\"${UNDERLINE_CLASSES}\">${string}</span>`;\n }\n if (strikethrough) {\n string = `<span class=\"${STRIKETHROUGH_CLASSES}\">${string}</span>`;\n }\n if (code) {\n string = `<span class=\"${CODE_CLASSES}\">${string}</span>`;\n }\n return string;\n};\n"],"names":["serializeLeafToHtml","node","string","escapeHtml","bold","italic","underline","strikethrough","code","BOLD_CLASSES","ITALIC_CLASSES","UNDERLINE_CLASSES","STRIKETHROUGH_CLASSES","CODE_CLASSES"],"mappings":";;;;;;AAYa,MAAAA,IAAsB,CAACC,MAAwB;AACpD,MAAAC,IAASC,EAAWF,EAAK,IAAI;AACxB,EAAAC,IAAAA,EAAO,WAAW;AAAA,GAAM,QAAQ;
|
|
1
|
+
{"version":3,"file":"serializeLeafToHtml.es.js","sources":["../../../../../src/components/RichTextEditor/serializer/utils/serializeLeafToHtml.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n BOLD_CLASSES,\n CODE_CLASSES,\n ITALIC_CLASSES,\n STRIKETHROUGH_CLASSES,\n UNDERLINE_CLASSES,\n} from '@components/RichTextEditor/Plugins';\nimport { TText } from '@udecode/plate';\nimport escapeHtml from 'escape-html';\n\nexport const serializeLeafToHtml = (node: TText): string => {\n let string = escapeHtml(node.text);\n string = string.replaceAll('\\n', '<br />');\n const { bold, italic, underline, strikethrough, code, subscript, superscript } = node;\n if (bold) {\n string = `<span class=\"${BOLD_CLASSES}\">${string}</span>`;\n }\n if (italic) {\n string = `<span class=\"${ITALIC_CLASSES}\">${string}</span>`;\n }\n if (underline) {\n string = `<span class=\"${UNDERLINE_CLASSES}\">${string}</span>`;\n }\n if (strikethrough) {\n string = `<span class=\"${STRIKETHROUGH_CLASSES}\">${string}</span>`;\n }\n if (code) {\n string = `<span class=\"${CODE_CLASSES}\">${string}</span>`;\n }\n if (subscript) {\n string = `<sub>${string}</sub>`;\n } else if (superscript) {\n string = `<sup>${string}</sup>`;\n }\n return string;\n};\n"],"names":["serializeLeafToHtml","node","string","escapeHtml","bold","italic","underline","strikethrough","code","subscript","superscript","BOLD_CLASSES","ITALIC_CLASSES","UNDERLINE_CLASSES","STRIKETHROUGH_CLASSES","CODE_CLASSES"],"mappings":";;;;;;AAYa,MAAAA,IAAsB,CAACC,MAAwB;AACpD,MAAAC,IAASC,EAAWF,EAAK,IAAI;AACxB,EAAAC,IAAAA,EAAO,WAAW;AAAA,GAAM,QAAQ;AACnC,QAAA,EAAE,MAAAE,GAAM,QAAAC,GAAQ,WAAAC,GAAW,eAAAC,GAAe,MAAAC,GAAM,WAAAC,GAAW,aAAAC,EAAgB,IAAAT;AACjF,SAAIG,MACAF,IAAS,gBAAgBS,MAAiBT,aAE1CG,MACAH,IAAS,gBAAgBU,MAAmBV,aAE5CI,MACAJ,IAAS,gBAAgBW,MAAsBX,aAE/CK,MACAL,IAAS,gBAAgBY,MAA0BZ,aAEnDM,MACAN,IAAS,gBAAgBa,MAAiBb,aAE1CO,IACAP,IAAS,QAAQA,YACVQ,MACPR,IAAS,QAAQA,YAEdA;AACX;"}
|
|
@@ -1,24 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { FOCUS_VISIBLE_STYLE as
|
|
3
|
-
import { merge as
|
|
4
|
-
import { checkIfContainInteractiveElements as
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
return
|
|
1
|
+
import s, { useRef as c, useState as l, useEffect as i } from "react";
|
|
2
|
+
import { FOCUS_VISIBLE_STYLE as f } from "../../utilities/focusStyle.es.js";
|
|
3
|
+
import { merge as I } from "../../utilities/merge.es.js";
|
|
4
|
+
import { checkIfContainInteractiveElements as p } from "../../utilities/elements.es.js";
|
|
5
|
+
const u = ({ active: r, disabled: m, children: e, id: t }) => {
|
|
6
|
+
const a = c(null), [n, o] = l(!1);
|
|
7
|
+
return i(() => {
|
|
8
|
+
o(p(a.current));
|
|
9
|
+
}, [e]), /* @__PURE__ */ s.createElement(
|
|
8
10
|
"div",
|
|
9
11
|
{
|
|
10
12
|
role: "tabpanel",
|
|
11
|
-
ref:
|
|
12
|
-
id: `${
|
|
13
|
-
"aria-labelledby":
|
|
14
|
-
className:
|
|
15
|
-
tabIndex:
|
|
13
|
+
ref: a,
|
|
14
|
+
id: `${t}-content`,
|
|
15
|
+
"aria-labelledby": t,
|
|
16
|
+
className: I([!r || m ? "tw-hidden" : "", !n && f]),
|
|
17
|
+
tabIndex: n ? -1 : 0
|
|
16
18
|
},
|
|
17
|
-
|
|
19
|
+
e
|
|
18
20
|
);
|
|
19
21
|
};
|
|
20
|
-
|
|
22
|
+
u.displayName = "FondueTabItem";
|
|
21
23
|
export {
|
|
22
|
-
|
|
24
|
+
u as TabItem
|
|
23
25
|
};
|
|
24
26
|
//# sourceMappingURL=TabItem.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabItem.es.js","sources":["../../../src/components/Tabs/TabItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { ReactElement, ReactNode, useRef } from 'react';\nimport { BadgeProps } from '@components/Badge';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { checkIfContainInteractiveElements } from '@utilities/elements';\n\nexport type TabItemProps = {\n id: string;\n label: string;\n onClick?: () => void;\n disabled?: boolean;\n decorator?: ReactElement;\n badge?: BadgeProps;\n children: ReactNode;\n};\n\nexport const TabItem = ({ active, disabled, children, id }: TabItemProps & { active?: boolean }): ReactElement => {\n const ref = useRef<HTMLDivElement | null>(null);\n const hasInteractiveElements = checkIfContainInteractiveElements(ref.current);\n\n return (\n <div\n role=\"tabpanel\"\n ref={ref}\n id={`${id}-content`}\n aria-labelledby={id}\n className={merge([!active || disabled ? 'tw-hidden' : '', !hasInteractiveElements && FOCUS_VISIBLE_STYLE])}\n tabIndex={hasInteractiveElements ? -1 : 0}\n >\n {children}\n </div>\n );\n};\nTabItem.displayName = 'FondueTabItem';\n"],"names":["TabItem","active","disabled","children","id","ref","useRef","hasInteractiveElements","checkIfContainInteractiveElements","React","merge","FOCUS_VISIBLE_STYLE"],"mappings":";;;;AAkBO,MAAMA,IAAU,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,UAAAC,GAAU,IAAAC,QAA4D;AACxG,QAAAC,IAAMC,EAA8B,IAAI,
|
|
1
|
+
{"version":3,"file":"TabItem.es.js","sources":["../../../src/components/Tabs/TabItem.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport React, { ReactElement, ReactNode, useEffect, useRef, useState } from 'react';\nimport { BadgeProps } from '@components/Badge';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport { checkIfContainInteractiveElements } from '@utilities/elements';\n\nexport type TabItemProps = {\n id: string;\n label: string;\n onClick?: () => void;\n disabled?: boolean;\n decorator?: ReactElement;\n badge?: BadgeProps;\n children: ReactNode;\n};\n\nexport const TabItem = ({ active, disabled, children, id }: TabItemProps & { active?: boolean }): ReactElement => {\n const ref = useRef<HTMLDivElement | null>(null);\n const [hasInteractiveElements, setHasInteractiveElements] = useState(false);\n\n useEffect(() => {\n setHasInteractiveElements(checkIfContainInteractiveElements(ref.current));\n }, [children]);\n\n return (\n <div\n role=\"tabpanel\"\n ref={ref}\n id={`${id}-content`}\n aria-labelledby={id}\n className={merge([!active || disabled ? 'tw-hidden' : '', !hasInteractiveElements && FOCUS_VISIBLE_STYLE])}\n tabIndex={hasInteractiveElements ? -1 : 0}\n >\n {children}\n </div>\n );\n};\nTabItem.displayName = 'FondueTabItem';\n"],"names":["TabItem","active","disabled","children","id","ref","useRef","hasInteractiveElements","setHasInteractiveElements","useState","useEffect","checkIfContainInteractiveElements","React","merge","FOCUS_VISIBLE_STYLE"],"mappings":";;;;AAkBO,MAAMA,IAAU,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,UAAAC,GAAU,IAAAC,QAA4D;AACxG,QAAAC,IAAMC,EAA8B,IAAI,GACxC,CAACC,GAAwBC,CAAyB,IAAIC,EAAS,EAAK;AAE1E,SAAAC,EAAU,MAAM;AACc,IAAAF,EAAAG,EAAkCN,EAAI,OAAO,CAAC;AAAA,EAAA,GACzE,CAACF,CAAQ,CAAC,GAGT,gBAAAS,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAK;AAAA,MACL,KAAAP;AAAA,MACA,IAAI,GAAGD;AAAA,MACP,mBAAiBA;AAAA,MACjB,WAAWS,EAAM,CAAC,CAACZ,KAAUC,IAAW,cAAc,IAAI,CAACK,KAA0BO,CAAmB,CAAC;AAAA,MACzG,UAAUP,IAAyB,KAAK;AAAA,IAAA;AAAA,IAEvCJ;AAAA,EAAA;AAGb;AACAH,EAAQ,cAAc;"}
|
|
@@ -2,7 +2,7 @@ import { IconSize as D } from "../../foundation/Icon/IconSize.es.js";
|
|
|
2
2
|
import { useLink as ce } from "@react-aria/link";
|
|
3
3
|
import { FOCUS_VISIBLE_STYLE as pe } from "../../utilities/focusStyle.es.js";
|
|
4
4
|
import { merge as f } from "../../utilities/merge.es.js";
|
|
5
|
-
import t, { useState as
|
|
5
|
+
import t, { useState as b, useRef as V, useMemo as ue, useCallback as E, useEffect as W, useLayoutEffect as be, cloneElement as T } from "react";
|
|
6
6
|
import { BrightHeader as Ee, brightHeaderArrowBackgroundColors as C } from "./BrightHeader.es.js";
|
|
7
7
|
import { usePopper as ge } from "react-popper";
|
|
8
8
|
import { useMemoizedId as Se } from "../../hooks/useMemoizedId.es.js";
|
|
@@ -10,14 +10,14 @@ import { Portal as ve } from "../Portal/Portal.es.js";
|
|
|
10
10
|
import { Button as Y } from "../Button/Button.es.js";
|
|
11
11
|
import { ButtonStyle as j, ButtonEmphasis as q, ButtonSize as G } from "../Button/ButtonTypes.es.js";
|
|
12
12
|
const J = {
|
|
13
|
-
small: "tw-pt-
|
|
14
|
-
large: "tw-pt-
|
|
13
|
+
small: "tw-pt-2",
|
|
14
|
+
large: "tw-pt-3"
|
|
15
15
|
}, K = {
|
|
16
|
-
small: "tw-pb-
|
|
17
|
-
large: "tw-pb-
|
|
16
|
+
small: "tw-pb-2",
|
|
17
|
+
large: "tw-pb-3"
|
|
18
18
|
};
|
|
19
|
-
var
|
|
20
|
-
const
|
|
19
|
+
var he = /* @__PURE__ */ ((e) => (e.Top = "Top", e.Right = "Right", e.Bottom = "Bottom", e.Left = "Left", e))(he || {}), ke = /* @__PURE__ */ ((e) => (e.Start = "Start", e.Middle = "Middle", e.End = "End", e))(ke || {});
|
|
20
|
+
const xe = {
|
|
21
21
|
["Top-Start"]: "top-start",
|
|
22
22
|
["Top-End"]: "top-end",
|
|
23
23
|
["Bottom-Start"]: "bottom-start",
|
|
@@ -59,31 +59,31 @@ const he = {
|
|
|
59
59
|
content: e,
|
|
60
60
|
tooltipIcon: r,
|
|
61
61
|
heading: l,
|
|
62
|
-
headingIcon:
|
|
62
|
+
headingIcon: g,
|
|
63
63
|
linkUrl: c,
|
|
64
64
|
linkLabel: Q,
|
|
65
|
-
brightHeader:
|
|
65
|
+
brightHeader: k,
|
|
66
66
|
buttons: o,
|
|
67
67
|
children: X,
|
|
68
68
|
position: y = "Bottom",
|
|
69
69
|
alignment: B = "Middle",
|
|
70
|
-
withArrow:
|
|
70
|
+
withArrow: S,
|
|
71
71
|
flip: Z = !0,
|
|
72
72
|
triggerElement: R,
|
|
73
73
|
hoverDelay: z = 200,
|
|
74
|
-
enterDelay:
|
|
74
|
+
enterDelay: x = 0,
|
|
75
75
|
open: M = !1,
|
|
76
|
-
disabled:
|
|
77
|
-
enablePortal:
|
|
78
|
-
hidden:
|
|
76
|
+
disabled: H = !1,
|
|
77
|
+
enablePortal: P = !1,
|
|
78
|
+
hidden: A = !1
|
|
79
79
|
}) => {
|
|
80
80
|
var _;
|
|
81
|
-
const [L, U] =
|
|
81
|
+
const [L, U] = b(
|
|
82
82
|
null
|
|
83
|
-
), N = V(null), s =
|
|
84
|
-
() => c ||
|
|
85
|
-
[c,
|
|
86
|
-
), re =
|
|
83
|
+
), N = V(null), s = A || H, { linkProps: ee } = ce({ isDisabled: s }, N), te = ue(
|
|
84
|
+
() => c || o || l || g,
|
|
85
|
+
[c, o, l, g]
|
|
86
|
+
), re = xe[`${y}-${B}`], [p, oe] = b(null), [v, ae] = b(null), [se, ne] = b(null), O = Se(), w = ge(L, p, {
|
|
87
87
|
placement: re,
|
|
88
88
|
strategy: "fixed",
|
|
89
89
|
modifiers: [
|
|
@@ -96,7 +96,7 @@ const he = {
|
|
|
96
96
|
{
|
|
97
97
|
name: "offset",
|
|
98
98
|
options: {
|
|
99
|
-
offset: [0,
|
|
99
|
+
offset: [0, S ? 10 : 5]
|
|
100
100
|
}
|
|
101
101
|
},
|
|
102
102
|
{
|
|
@@ -104,27 +104,27 @@ const he = {
|
|
|
104
104
|
enabled: Z
|
|
105
105
|
}
|
|
106
106
|
]
|
|
107
|
-
}), le = ((_ = w.state) == null ? void 0 : _.placement) ?? y, ie = Le(le,
|
|
107
|
+
}), le = ((_ = w.state) == null ? void 0 : _.placement) ?? y, ie = Le(le, k, B), [i, d] = b(!1), n = V(null), de = E(() => {
|
|
108
108
|
n.current && clearTimeout(n.current), n.current = setTimeout(() => d(!1), z);
|
|
109
|
-
}, [z]), F =
|
|
110
|
-
if (n.current && clearTimeout(n.current),
|
|
111
|
-
n.current = setTimeout(() => d(!0),
|
|
109
|
+
}, [z]), F = E(() => {
|
|
110
|
+
if (n.current && clearTimeout(n.current), x) {
|
|
111
|
+
n.current = setTimeout(() => d(!0), x);
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
d(!0);
|
|
115
|
-
}, [
|
|
115
|
+
}, [x]), fe = E(
|
|
116
116
|
(a) => {
|
|
117
117
|
var m;
|
|
118
|
-
const
|
|
119
|
-
|
|
118
|
+
const u = (m = a.composedPath) == null ? void 0 : m.call(a);
|
|
119
|
+
u && [L, v, p].some(($) => $ && u.includes($)) && F();
|
|
120
120
|
},
|
|
121
|
-
[F,
|
|
122
|
-
), we =
|
|
121
|
+
[F, p, v, L]
|
|
122
|
+
), we = E(
|
|
123
123
|
(a) => {
|
|
124
|
-
const { relatedTarget:
|
|
125
|
-
(!
|
|
124
|
+
const { relatedTarget: u } = a;
|
|
125
|
+
(!u || ![p, v].some((m) => m == null ? void 0 : m.contains(u))) && d(!1);
|
|
126
126
|
},
|
|
127
|
-
[
|
|
127
|
+
[p, v]
|
|
128
128
|
), I = s ? {} : {
|
|
129
129
|
onMouseOver: (a) => fe(a.nativeEvent),
|
|
130
130
|
onMouseLeave: de,
|
|
@@ -134,7 +134,7 @@ const he = {
|
|
|
134
134
|
W(() => {
|
|
135
135
|
n.current && clearTimeout(n.current), d(s ? !1 : M);
|
|
136
136
|
}, [M, s]);
|
|
137
|
-
const
|
|
137
|
+
const h = E(
|
|
138
138
|
(a) => {
|
|
139
139
|
i && a.key === "Escape" && d(!1);
|
|
140
140
|
},
|
|
@@ -142,13 +142,13 @@ const he = {
|
|
|
142
142
|
);
|
|
143
143
|
return be(() => {
|
|
144
144
|
typeof w.update == "function" && i && w.update();
|
|
145
|
-
}, [i]), W(() => (i ? window.addEventListener("keydown",
|
|
146
|
-
window.removeEventListener("keydown",
|
|
147
|
-
}), [
|
|
145
|
+
}, [i]), W(() => (i ? window.addEventListener("keydown", h) : window.removeEventListener("keydown", h), () => {
|
|
146
|
+
window.removeEventListener("keydown", h);
|
|
147
|
+
}), [h, i]), /* @__PURE__ */ t.createElement(t.Fragment, null, /* @__PURE__ */ t.createElement("div", { ...I, ref: ae }, R && T(R, {
|
|
148
148
|
ref: U,
|
|
149
149
|
"aria-describedby": O,
|
|
150
150
|
"aria-disabled": s
|
|
151
|
-
})), /* @__PURE__ */ t.createElement(Te, { enablePortal:
|
|
151
|
+
})), /* @__PURE__ */ t.createElement(Te, { enablePortal: P }, /* @__PURE__ */ t.createElement(
|
|
152
152
|
"div",
|
|
153
153
|
{
|
|
154
154
|
ref: oe,
|
|
@@ -164,17 +164,17 @@ const he = {
|
|
|
164
164
|
...w.attributes.popper,
|
|
165
165
|
...I
|
|
166
166
|
},
|
|
167
|
-
|
|
167
|
+
k && /* @__PURE__ */ t.createElement(Ee, { headerStyle: k }),
|
|
168
168
|
/* @__PURE__ */ t.createElement(
|
|
169
169
|
"div",
|
|
170
170
|
{
|
|
171
171
|
className: f([
|
|
172
|
-
"tw-px-
|
|
173
|
-
te ? J.
|
|
174
|
-
c ? K.
|
|
172
|
+
"tw-px-3 tw-dark tw-bg-base tw-rounded-md tw-relative tw-z-[120000]",
|
|
173
|
+
te ? J.large : J.small,
|
|
174
|
+
c ? K.large : K.small
|
|
175
175
|
])
|
|
176
176
|
},
|
|
177
|
-
l && /* @__PURE__ */ t.createElement("h4", { className: "tw-flex tw-text-m tw-font-bold tw-mb-1" },
|
|
177
|
+
l && /* @__PURE__ */ t.createElement("h4", { className: "tw-flex tw-text-m tw-font-bold tw-mb-1" }, g && /* @__PURE__ */ t.createElement("span", { className: "tw-mr-1.5" }, T(g, { size: D.Size20 })), l),
|
|
178
178
|
/* @__PURE__ */ t.createElement("div", { className: "tw-flex" }, r && /* @__PURE__ */ t.createElement("span", { className: "tw-shrink-0 tw-mr-1 tw-leading-4" }, T(r, { size: D.Size16 })), /* @__PURE__ */ t.createElement("span", { className: "tw-text-s tw-min-w-0 tw-break-words" }, e)),
|
|
179
179
|
c && /* @__PURE__ */ t.createElement(
|
|
180
180
|
"a",
|
|
@@ -218,12 +218,12 @@ const he = {
|
|
|
218
218
|
"div",
|
|
219
219
|
{
|
|
220
220
|
"data-test-id": "popover-arrow",
|
|
221
|
-
"data-popper-arrow":
|
|
221
|
+
"data-popper-arrow": S,
|
|
222
222
|
ref: ne,
|
|
223
223
|
style: w.styles.arrow,
|
|
224
224
|
className: f([
|
|
225
|
-
|
|
226
|
-
|
|
225
|
+
S && "tw-popper-arrow tw-z-[110000] 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",
|
|
226
|
+
S && ie
|
|
227
227
|
])
|
|
228
228
|
}
|
|
229
229
|
)),
|
|
@@ -233,7 +233,7 @@ const he = {
|
|
|
233
233
|
Ce.displayName = "FondueTooltip";
|
|
234
234
|
export {
|
|
235
235
|
Ce as Tooltip,
|
|
236
|
-
|
|
237
|
-
|
|
236
|
+
ke as TooltipAlignment,
|
|
237
|
+
he as TooltipPosition
|
|
238
238
|
};
|
|
239
239
|
//# sourceMappingURL=Tooltip.es.js.map
|
|
@@ -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 { Button, ButtonEmphasis, ButtonSize, ButtonStyle } from '@components/Button';\nimport { IconSize } from '@foundation/Icon/IconSize';\nimport { useLink } from '@react-aria/link';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport React, {\n FocusEvent,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { BrightHeader, BrightHeaderStyle, brightHeaderArrowBackgroundColors } from './BrightHeader';\nimport { usePopper } from 'react-popper';\nimport { Placement } from '@popperjs/core';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { Portal } from '@components/Portal';\n\nexport type TooltipButton = {\n label: string;\n action: () => void;\n};\n\nexport type TooltipProps = {\n triggerElement?: ReactElement;\n content: ReactNode;\n tooltipIcon?: ReactElement;\n heading?: ReactNode;\n headingIcon?: ReactElement;\n linkUrl?: string;\n linkLabel?: string;\n brightHeader?: BrightHeaderStyle;\n buttons?: [TooltipButton, TooltipButton] | [TooltipButton];\n children?: ReactNode;\n position?: TooltipPosition;\n alignment?: TooltipAlignment;\n flip?: boolean;\n withArrow?: boolean;\n hoverDelay?: number;\n enterDelay?: number;\n open?: boolean;\n disabled?: boolean;\n /** @deprecated use disabled since the tooltip is always present in the DOM now so hidden has no effect anymore */\n hidden?: boolean;\n enablePortal?: boolean;\n};\n\n/**\n * This is a temporary workaround because for some yet unknown reasons `tailwindcss` in clarify purges the `tw-pb-3.5` and `tw-pt-3.5` class.\n */\nconst paddingsTop = {\n small: 'tw-pt-3.5',\n large: 'tw-pt-4',\n};\n\nconst paddingsBottom = {\n small: 'tw-pb-3.5',\n large: 'tw-pb-4',\n};\n\nexport enum TooltipPosition {\n Top = 'Top',\n Right = 'Right',\n Bottom = 'Bottom',\n Left = 'Left',\n}\n\nexport enum TooltipAlignment {\n Start = 'Start',\n Middle = 'Middle',\n End = 'End',\n}\n\nconst placementMap: Record<`${TooltipPosition}-${TooltipAlignment}`, Placement> = {\n ['Top-Start']: 'top-start',\n ['Top-End']: 'top-end',\n ['Bottom-Start']: 'bottom-start',\n ['Bottom-End']: 'bottom-end',\n ['Left-Start']: 'left-start',\n ['Left-End']: 'left-end',\n ['Right-Start']: 'right-start',\n ['Right-End']: 'right-end',\n ['Top-Middle']: 'top',\n ['Right-Middle']: 'right',\n ['Bottom-Middle']: 'bottom',\n ['Left-Middle']: 'left',\n};\n\nconst getArrowClasses = (currentPlacement: string, brightHeader: BrightHeaderStyle | undefined, alignment: string) => {\n switch (true) {\n case currentPlacement.toString().includes(TooltipPosition.Top.toLowerCase()):\n return 'before:tw-border-t-0 before:tw-border-l-0 tw-bottom-[-6px] before:tw-dark before:tw-bg-base';\n case currentPlacement.toString().includes(TooltipPosition.Right.toLowerCase()):\n return merge([\n 'before:tw-border-t-0 before:tw-border-r-0 tw-left-[-5px]',\n brightHeader &&\n alignment === TooltipAlignment.Start &&\n currentPlacement.toString().includes(TooltipAlignment.Start.toLowerCase())\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-dark before:tw-bg-base',\n ]);\n case currentPlacement.toString().includes(TooltipPosition.Bottom.toLowerCase()):\n return merge([\n 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]',\n brightHeader ? brightHeaderArrowBackgroundColors[brightHeader] : 'before:tw-dark before:tw-bg-base',\n ]);\n case currentPlacement.toString().includes(TooltipPosition.Left.toLowerCase()):\n return merge([\n 'before:tw-border-b-0 before:tw-border-l-0 tw-right-[-5px]',\n brightHeader &&\n alignment === TooltipAlignment.Start &&\n currentPlacement.toString().includes(TooltipAlignment.Start.toLowerCase())\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-dark before:tw-bg-base',\n ]);\n default:\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px] before:tw-dark before:tw-bg-base';\n }\n};\n\nconst TooltipWrapper = ({\n enablePortal = false,\n children,\n}: {\n enablePortal?: boolean;\n children?: ReactNode | ReactNode[];\n}) => {\n if (enablePortal) {\n return (<Portal>{children}</Portal>) as JSX.Element;\n }\n\n return children as JSX.Element;\n};\n\nexport const Tooltip = ({\n content,\n tooltipIcon,\n heading,\n headingIcon,\n linkUrl,\n linkLabel,\n brightHeader,\n buttons,\n children,\n position = TooltipPosition.Bottom,\n alignment = TooltipAlignment.Middle,\n withArrow,\n flip = true,\n triggerElement,\n hoverDelay = 200,\n enterDelay = 0,\n open = false,\n disabled = false,\n enablePortal = false,\n hidden = false,\n}: TooltipProps) => {\n const [triggerElementRef, setTriggerElementRef] = useState<HTMLElement | HTMLDivElement | HTMLButtonElement | null>(\n null,\n );\n const linkRef = useRef<HTMLAnchorElement | null>(null);\n\n const shouldPreventTooltipOpening = hidden || disabled;\n const { linkProps } = useLink({ isDisabled: shouldPreventTooltipOpening }, linkRef);\n const hasLargePaddingTop = useMemo(\n () => linkUrl || brightHeader || buttons || heading || headingIcon,\n [linkUrl, brightHeader, buttons, heading, headingIcon],\n );\n\n const placement = placementMap[`${position}-${alignment}`];\n const [tooltipContainerRef, setTooltipContainerRef] = useState<HTMLDivElement | null>(null);\n const [triggerElementContainerRef, setTriggerElementContainerRef] = useState<HTMLDivElement | null>(null);\n const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);\n const id = useMemoizedId();\n\n const tooltipOffset = withArrow ? 10 : 5;\n const popperInstance = usePopper(triggerElementRef, tooltipContainerRef, {\n placement,\n strategy: 'fixed',\n modifiers: [\n {\n name: 'arrow',\n options: {\n element: arrowElement,\n },\n },\n {\n name: 'offset',\n options: {\n offset: [0, tooltipOffset],\n },\n },\n {\n name: 'flip',\n enabled: flip,\n },\n ],\n });\n\n const currentPlacement = popperInstance.state?.placement ?? position;\n const arrowStyling = getArrowClasses(currentPlacement, brightHeader, alignment);\n const [isOpen, setIsOpen] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleHideTooltipOnHover = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => setIsOpen(false), hoverDelay);\n }, [hoverDelay]);\n\n const handleShowTooltipOnHover = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (enterDelay) {\n timeoutRef.current = setTimeout(() => setIsOpen(true), enterDelay);\n return;\n }\n\n setIsOpen(true);\n }, [enterDelay]);\n\n const checkIfHovered = useCallback(\n (event: MouseEvent) => {\n const hoveredElement = event.composedPath?.();\n const hoverSources = [triggerElementRef, triggerElementContainerRef, tooltipContainerRef];\n\n if (hoveredElement && hoverSources.some((el) => el && hoveredElement.includes(el))) {\n handleShowTooltipOnHover();\n }\n },\n [handleShowTooltipOnHover, tooltipContainerRef, triggerElementContainerRef, triggerElementRef],\n );\n\n const handleCloseIfFocusedOutside = useCallback(\n (event: FocusEvent<HTMLElement>) => {\n const { relatedTarget } = event;\n const elements = [tooltipContainerRef, triggerElementContainerRef];\n\n if (!relatedTarget || !elements.some((element) => element?.contains(relatedTarget))) {\n setIsOpen(false);\n }\n },\n [tooltipContainerRef, triggerElementContainerRef],\n );\n\n const openingEvents: HTMLAttributes<HTMLElement> = shouldPreventTooltipOpening\n ? {}\n : {\n onMouseOver: (event) => checkIfHovered(event.nativeEvent),\n onMouseLeave: handleHideTooltipOnHover,\n onFocus: () => setIsOpen(true),\n onBlur: handleCloseIfFocusedOutside,\n };\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsOpen(shouldPreventTooltipOpening ? false : open);\n }, [open, shouldPreventTooltipOpening]);\n\n const listenForEsc = useCallback(\n (event: KeyboardEvent) => {\n if (isOpen && event.key === 'Escape') {\n setIsOpen(false);\n }\n },\n [isOpen],\n );\n\n useLayoutEffect(() => {\n if (typeof popperInstance.update === 'function' && isOpen) {\n popperInstance.update();\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener('keydown', listenForEsc);\n } else {\n window.removeEventListener('keydown', listenForEsc);\n }\n\n return () => {\n window.removeEventListener('keydown', listenForEsc);\n };\n }, [listenForEsc, isOpen]);\n\n return (\n <>\n <div {...openingEvents} ref={setTriggerElementContainerRef}>\n {triggerElement &&\n cloneElement(triggerElement, {\n ref: setTriggerElementRef,\n 'aria-describedby': id,\n 'aria-disabled': shouldPreventTooltipOpening,\n })}\n </div>\n <TooltipWrapper enablePortal={enablePortal}>\n <div\n ref={setTooltipContainerRef}\n aria-hidden={shouldPreventTooltipOpening}\n className={merge([\n 'tw-popper-container tw-inline-block tw-max-w-[200px] tw-dark tw-bg-base tw-rounded-md tw-shadow-mid tw-text-text tw-z-[120000]',\n !isOpen && 'tw-opacity-0 tw-h-0 tw-w-0 tw-overflow-hidden',\n ])}\n data-test-id=\"tooltip\"\n role=\"tooltip\"\n id={id}\n style={popperInstance.styles.popper}\n {...popperInstance.attributes.popper}\n {...openingEvents}\n >\n {brightHeader && <BrightHeader headerStyle={brightHeader} />}\n <div\n className={merge([\n 'tw-px-4 tw-dark tw-bg-base tw-rounded-md tw-relative tw-z-[120000]',\n hasLargePaddingTop ? paddingsTop.small : paddingsTop.large,\n linkUrl ? paddingsBottom.small : paddingsBottom.large,\n ])}\n >\n {heading && (\n <h4 className=\"tw-flex tw-text-m tw-font-bold tw-mb-1\">\n {headingIcon && (\n <span className=\"tw-mr-1.5\">\n {cloneElement(headingIcon, { size: IconSize.Size20 })}\n </span>\n )}\n {heading}\n </h4>\n )}\n <div className=\"tw-flex\">\n {tooltipIcon && (\n <span className=\"tw-shrink-0 tw-mr-1 tw-leading-4\">\n {cloneElement(tooltipIcon, { size: IconSize.Size16 })}\n </span>\n )}\n <span className=\"tw-text-s tw-min-w-0 tw-break-words\">{content}</span>\n </div>\n {linkUrl && (\n <a\n {...linkProps}\n data-test-id=\"tooltip-link\"\n ref={linkRef}\n href={linkUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={merge([\n 'tw-text-xs tw-text-black-40 tw-underline tw-mt-1',\n FOCUS_VISIBLE_STYLE,\n ])}\n >\n {linkLabel ?? 'Click here to learn more.'}\n </a>\n )}\n {buttons && (\n <div className=\"tw-flex tw-flex-row-reverse tw-gap-x-1 tw-mt-4\">\n {buttons.length > 0 && (\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Strong}\n size={ButtonSize.Small}\n onClick={buttons[0].action}\n disabled={shouldPreventTooltipOpening}\n >\n {buttons[0].label}\n </Button>\n )}\n {buttons.length === 2 && (\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Default}\n size={ButtonSize.Small}\n onClick={buttons[1].action}\n disabled={shouldPreventTooltipOpening}\n >\n {buttons[1].label}\n </Button>\n )}\n </div>\n )}\n </div>\n {/**\n * This container is needed for the arrow element to not be styled by popperJS\n * selectors for its immediate children .tw-popper-container > .tw-popper-arrow\n * */}\n <div aria-hidden=\"true\">\n <div\n data-test-id=\"popover-arrow\"\n data-popper-arrow={withArrow}\n ref={setArrowElement}\n style={popperInstance.styles.arrow}\n className={merge([\n withArrow &&\n 'tw-popper-arrow tw-z-[110000] 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',\n withArrow && arrowStyling,\n ])}\n />\n </div>\n {children}\n </div>\n </TooltipWrapper>\n </>\n );\n};\nTooltip.displayName = 'FondueTooltip';\n"],"names":["paddingsTop","paddingsBottom","TooltipPosition","TooltipAlignment","placementMap","getArrowClasses","currentPlacement","brightHeader","alignment","merge","brightHeaderArrowBackgroundColors","TooltipWrapper","enablePortal","children","React","Portal","Tooltip","content","tooltipIcon","heading","headingIcon","linkUrl","linkLabel","buttons","position","withArrow","flip","triggerElement","hoverDelay","enterDelay","open","disabled","hidden","triggerElementRef","setTriggerElementRef","useState","linkRef","useRef","shouldPreventTooltipOpening","linkProps","useLink","hasLargePaddingTop","useMemo","placement","tooltipContainerRef","setTooltipContainerRef","triggerElementContainerRef","setTriggerElementContainerRef","arrowElement","setArrowElement","id","useMemoizedId","popperInstance","usePopper","_a","arrowStyling","isOpen","setIsOpen","timeoutRef","handleHideTooltipOnHover","useCallback","handleShowTooltipOnHover","checkIfHovered","event","hoveredElement","el","handleCloseIfFocusedOutside","relatedTarget","element","openingEvents","useEffect","listenForEsc","useLayoutEffect","cloneElement","BrightHeader","IconSize","FOCUS_VISIBLE_STYLE","Button","ButtonStyle","ButtonEmphasis","ButtonSize"],"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 { Button, ButtonEmphasis, ButtonSize, ButtonStyle } from '@components/Button';\nimport { IconSize } from '@foundation/Icon/IconSize';\nimport { useLink } from '@react-aria/link';\nimport { FOCUS_VISIBLE_STYLE } from '@utilities/focusStyle';\nimport { merge } from '@utilities/merge';\nimport React, {\n FocusEvent,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { BrightHeader, BrightHeaderStyle, brightHeaderArrowBackgroundColors } from './BrightHeader';\nimport { usePopper } from 'react-popper';\nimport { Placement } from '@popperjs/core';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { Portal } from '@components/Portal';\n\nexport type TooltipButton = {\n label: string;\n action: () => void;\n};\n\nexport type TooltipProps = {\n triggerElement?: ReactElement;\n content: ReactNode;\n tooltipIcon?: ReactElement;\n heading?: ReactNode;\n headingIcon?: ReactElement;\n linkUrl?: string;\n linkLabel?: string;\n brightHeader?: BrightHeaderStyle;\n buttons?: [TooltipButton, TooltipButton] | [TooltipButton];\n children?: ReactNode;\n position?: TooltipPosition;\n alignment?: TooltipAlignment;\n flip?: boolean;\n withArrow?: boolean;\n hoverDelay?: number;\n enterDelay?: number;\n open?: boolean;\n disabled?: boolean;\n /** @deprecated use disabled since the tooltip is always present in the DOM now so hidden has no effect anymore */\n hidden?: boolean;\n enablePortal?: boolean;\n};\n\nconst paddingsTop = {\n small: 'tw-pt-2',\n large: 'tw-pt-3',\n};\n\nconst paddingsBottom = {\n small: 'tw-pb-2',\n large: 'tw-pb-3',\n};\n\nexport enum TooltipPosition {\n Top = 'Top',\n Right = 'Right',\n Bottom = 'Bottom',\n Left = 'Left',\n}\n\nexport enum TooltipAlignment {\n Start = 'Start',\n Middle = 'Middle',\n End = 'End',\n}\n\nconst placementMap: Record<`${TooltipPosition}-${TooltipAlignment}`, Placement> = {\n ['Top-Start']: 'top-start',\n ['Top-End']: 'top-end',\n ['Bottom-Start']: 'bottom-start',\n ['Bottom-End']: 'bottom-end',\n ['Left-Start']: 'left-start',\n ['Left-End']: 'left-end',\n ['Right-Start']: 'right-start',\n ['Right-End']: 'right-end',\n ['Top-Middle']: 'top',\n ['Right-Middle']: 'right',\n ['Bottom-Middle']: 'bottom',\n ['Left-Middle']: 'left',\n};\n\nconst getArrowClasses = (currentPlacement: string, brightHeader: BrightHeaderStyle | undefined, alignment: string) => {\n switch (true) {\n case currentPlacement.toString().includes(TooltipPosition.Top.toLowerCase()):\n return 'before:tw-border-t-0 before:tw-border-l-0 tw-bottom-[-6px] before:tw-dark before:tw-bg-base';\n case currentPlacement.toString().includes(TooltipPosition.Right.toLowerCase()):\n return merge([\n 'before:tw-border-t-0 before:tw-border-r-0 tw-left-[-5px]',\n brightHeader &&\n alignment === TooltipAlignment.Start &&\n currentPlacement.toString().includes(TooltipAlignment.Start.toLowerCase())\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-dark before:tw-bg-base',\n ]);\n case currentPlacement.toString().includes(TooltipPosition.Bottom.toLowerCase()):\n return merge([\n 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]',\n brightHeader ? brightHeaderArrowBackgroundColors[brightHeader] : 'before:tw-dark before:tw-bg-base',\n ]);\n case currentPlacement.toString().includes(TooltipPosition.Left.toLowerCase()):\n return merge([\n 'before:tw-border-b-0 before:tw-border-l-0 tw-right-[-5px]',\n brightHeader &&\n alignment === TooltipAlignment.Start &&\n currentPlacement.toString().includes(TooltipAlignment.Start.toLowerCase())\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-dark before:tw-bg-base',\n ]);\n default:\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px] before:tw-dark before:tw-bg-base';\n }\n};\n\nconst TooltipWrapper = ({\n enablePortal = false,\n children,\n}: {\n enablePortal?: boolean;\n children?: ReactNode | ReactNode[];\n}) => {\n if (enablePortal) {\n return (<Portal>{children}</Portal>) as JSX.Element;\n }\n\n return children as JSX.Element;\n};\n\nexport const Tooltip = ({\n content,\n tooltipIcon,\n heading,\n headingIcon,\n linkUrl,\n linkLabel,\n brightHeader,\n buttons,\n children,\n position = TooltipPosition.Bottom,\n alignment = TooltipAlignment.Middle,\n withArrow,\n flip = true,\n triggerElement,\n hoverDelay = 200,\n enterDelay = 0,\n open = false,\n disabled = false,\n enablePortal = false,\n hidden = false,\n}: TooltipProps) => {\n const [triggerElementRef, setTriggerElementRef] = useState<HTMLElement | HTMLDivElement | HTMLButtonElement | null>(\n null,\n );\n const linkRef = useRef<HTMLAnchorElement | null>(null);\n\n const shouldPreventTooltipOpening = hidden || disabled;\n const { linkProps } = useLink({ isDisabled: shouldPreventTooltipOpening }, linkRef);\n const hasLargePaddingTop = useMemo(\n () => linkUrl || buttons || heading || headingIcon,\n [linkUrl, buttons, heading, headingIcon],\n );\n\n const placement = placementMap[`${position}-${alignment}`];\n const [tooltipContainerRef, setTooltipContainerRef] = useState<HTMLDivElement | null>(null);\n const [triggerElementContainerRef, setTriggerElementContainerRef] = useState<HTMLDivElement | null>(null);\n const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);\n const id = useMemoizedId();\n\n const tooltipOffset = withArrow ? 10 : 5;\n const popperInstance = usePopper(triggerElementRef, tooltipContainerRef, {\n placement,\n strategy: 'fixed',\n modifiers: [\n {\n name: 'arrow',\n options: {\n element: arrowElement,\n },\n },\n {\n name: 'offset',\n options: {\n offset: [0, tooltipOffset],\n },\n },\n {\n name: 'flip',\n enabled: flip,\n },\n ],\n });\n\n const currentPlacement = popperInstance.state?.placement ?? position;\n const arrowStyling = getArrowClasses(currentPlacement, brightHeader, alignment);\n const [isOpen, setIsOpen] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleHideTooltipOnHover = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(() => setIsOpen(false), hoverDelay);\n }, [hoverDelay]);\n\n const handleShowTooltipOnHover = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n if (enterDelay) {\n timeoutRef.current = setTimeout(() => setIsOpen(true), enterDelay);\n return;\n }\n\n setIsOpen(true);\n }, [enterDelay]);\n\n const checkIfHovered = useCallback(\n (event: MouseEvent) => {\n const hoveredElement = event.composedPath?.();\n const hoverSources = [triggerElementRef, triggerElementContainerRef, tooltipContainerRef];\n\n if (hoveredElement && hoverSources.some((el) => el && hoveredElement.includes(el))) {\n handleShowTooltipOnHover();\n }\n },\n [handleShowTooltipOnHover, tooltipContainerRef, triggerElementContainerRef, triggerElementRef],\n );\n\n const handleCloseIfFocusedOutside = useCallback(\n (event: FocusEvent<HTMLElement>) => {\n const { relatedTarget } = event;\n const elements = [tooltipContainerRef, triggerElementContainerRef];\n\n if (!relatedTarget || !elements.some((element) => element?.contains(relatedTarget))) {\n setIsOpen(false);\n }\n },\n [tooltipContainerRef, triggerElementContainerRef],\n );\n\n const openingEvents: HTMLAttributes<HTMLElement> = shouldPreventTooltipOpening\n ? {}\n : {\n onMouseOver: (event) => checkIfHovered(event.nativeEvent),\n onMouseLeave: handleHideTooltipOnHover,\n onFocus: () => setIsOpen(true),\n onBlur: handleCloseIfFocusedOutside,\n };\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsOpen(shouldPreventTooltipOpening ? false : open);\n }, [open, shouldPreventTooltipOpening]);\n\n const listenForEsc = useCallback(\n (event: KeyboardEvent) => {\n if (isOpen && event.key === 'Escape') {\n setIsOpen(false);\n }\n },\n [isOpen],\n );\n\n useLayoutEffect(() => {\n if (typeof popperInstance.update === 'function' && isOpen) {\n popperInstance.update();\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener('keydown', listenForEsc);\n } else {\n window.removeEventListener('keydown', listenForEsc);\n }\n\n return () => {\n window.removeEventListener('keydown', listenForEsc);\n };\n }, [listenForEsc, isOpen]);\n\n return (\n <>\n <div {...openingEvents} ref={setTriggerElementContainerRef}>\n {triggerElement &&\n cloneElement(triggerElement, {\n ref: setTriggerElementRef,\n 'aria-describedby': id,\n 'aria-disabled': shouldPreventTooltipOpening,\n })}\n </div>\n <TooltipWrapper enablePortal={enablePortal}>\n <div\n ref={setTooltipContainerRef}\n aria-hidden={shouldPreventTooltipOpening}\n className={merge([\n 'tw-popper-container tw-inline-block tw-max-w-[200px] tw-dark tw-bg-base tw-rounded-md tw-shadow-mid tw-text-text tw-z-[120000]',\n !isOpen && 'tw-opacity-0 tw-h-0 tw-w-0 tw-overflow-hidden',\n ])}\n data-test-id=\"tooltip\"\n role=\"tooltip\"\n id={id}\n style={popperInstance.styles.popper}\n {...popperInstance.attributes.popper}\n {...openingEvents}\n >\n {brightHeader && <BrightHeader headerStyle={brightHeader} />}\n <div\n className={merge([\n 'tw-px-3 tw-dark tw-bg-base tw-rounded-md tw-relative tw-z-[120000]',\n hasLargePaddingTop ? paddingsTop.large : paddingsTop.small,\n linkUrl ? paddingsBottom.large : paddingsBottom.small,\n ])}\n >\n {heading && (\n <h4 className=\"tw-flex tw-text-m tw-font-bold tw-mb-1\">\n {headingIcon && (\n <span className=\"tw-mr-1.5\">\n {cloneElement(headingIcon, { size: IconSize.Size20 })}\n </span>\n )}\n {heading}\n </h4>\n )}\n <div className=\"tw-flex\">\n {tooltipIcon && (\n <span className=\"tw-shrink-0 tw-mr-1 tw-leading-4\">\n {cloneElement(tooltipIcon, { size: IconSize.Size16 })}\n </span>\n )}\n <span className=\"tw-text-s tw-min-w-0 tw-break-words\">{content}</span>\n </div>\n {linkUrl && (\n <a\n {...linkProps}\n data-test-id=\"tooltip-link\"\n ref={linkRef}\n href={linkUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={merge([\n 'tw-text-xs tw-text-black-40 tw-underline tw-mt-1',\n FOCUS_VISIBLE_STYLE,\n ])}\n >\n {linkLabel ?? 'Click here to learn more.'}\n </a>\n )}\n {buttons && (\n <div className=\"tw-flex tw-flex-row-reverse tw-gap-x-1 tw-mt-4\">\n {buttons.length > 0 && (\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Strong}\n size={ButtonSize.Small}\n onClick={buttons[0].action}\n disabled={shouldPreventTooltipOpening}\n >\n {buttons[0].label}\n </Button>\n )}\n {buttons.length === 2 && (\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Default}\n size={ButtonSize.Small}\n onClick={buttons[1].action}\n disabled={shouldPreventTooltipOpening}\n >\n {buttons[1].label}\n </Button>\n )}\n </div>\n )}\n </div>\n {/**\n * This container is needed for the arrow element to not be styled by popperJS\n * selectors for its immediate children .tw-popper-container > .tw-popper-arrow\n * */}\n <div aria-hidden=\"true\">\n <div\n data-test-id=\"popover-arrow\"\n data-popper-arrow={withArrow}\n ref={setArrowElement}\n style={popperInstance.styles.arrow}\n className={merge([\n withArrow &&\n 'tw-popper-arrow tw-z-[110000] 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',\n withArrow && arrowStyling,\n ])}\n />\n </div>\n {children}\n </div>\n </TooltipWrapper>\n </>\n );\n};\nTooltip.displayName = 'FondueTooltip';\n"],"names":["paddingsTop","paddingsBottom","TooltipPosition","TooltipAlignment","placementMap","getArrowClasses","currentPlacement","brightHeader","alignment","merge","brightHeaderArrowBackgroundColors","TooltipWrapper","enablePortal","children","React","Portal","Tooltip","content","tooltipIcon","heading","headingIcon","linkUrl","linkLabel","buttons","position","withArrow","flip","triggerElement","hoverDelay","enterDelay","open","disabled","hidden","triggerElementRef","setTriggerElementRef","useState","linkRef","useRef","shouldPreventTooltipOpening","linkProps","useLink","hasLargePaddingTop","useMemo","placement","tooltipContainerRef","setTooltipContainerRef","triggerElementContainerRef","setTriggerElementContainerRef","arrowElement","setArrowElement","id","useMemoizedId","popperInstance","usePopper","_a","arrowStyling","isOpen","setIsOpen","timeoutRef","handleHideTooltipOnHover","useCallback","handleShowTooltipOnHover","checkIfHovered","event","hoveredElement","el","handleCloseIfFocusedOutside","relatedTarget","element","openingEvents","useEffect","listenForEsc","useLayoutEffect","cloneElement","BrightHeader","IconSize","FOCUS_VISIBLE_STYLE","Button","ButtonStyle","ButtonEmphasis","ButtonSize"],"mappings":"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"}
|