@frontify/fondue 12.0.0-beta.13 → 12.0.0-beta.16

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 (55) hide show
  1. package/dist/components/DatePicker/DatePickerTrigger.es.js +17 -16
  2. package/dist/components/DatePicker/DatePickerTrigger.es.js.map +1 -1
  3. package/dist/components/Dropdown/Dropdown.es.js +41 -40
  4. package/dist/components/Dropdown/Dropdown.es.js.map +1 -1
  5. package/dist/components/LoadingBar/LoadingBar.d.ts +24 -0
  6. package/dist/components/LoadingBar/LoadingBar.es.js +50 -0
  7. package/dist/components/LoadingBar/LoadingBar.es.js.map +1 -0
  8. package/dist/components/LoadingBar/index.d.ts +1 -0
  9. package/dist/components/OverflowMenu/OverflowMenu.d.ts +6 -0
  10. package/dist/components/OverflowMenu/OverflowMenu.es.js +1721 -0
  11. package/dist/components/OverflowMenu/OverflowMenu.es.js.map +1 -0
  12. package/dist/components/OverflowMenu/OverflowMenuItem.d.ts +11 -0
  13. package/dist/components/OverflowMenu/OverflowMenuItem.es.js +1763 -0
  14. package/dist/components/OverflowMenu/OverflowMenuItem.es.js.map +1 -0
  15. package/dist/components/OverflowMenu/index.d.ts +1 -0
  16. package/dist/components/OverflowMenu/useOverflowMenuKeyboardNavigation.d.ts +1 -0
  17. package/dist/components/OverflowMenu/useOverflowMenuKeyboardNavigation.es.js +29 -0
  18. package/dist/components/OverflowMenu/useOverflowMenuKeyboardNavigation.es.js.map +1 -0
  19. package/dist/components/RichTextEditor/Plugins/GeneratePlugins.d.ts +3 -3
  20. package/dist/components/RichTextEditor/Plugins/GeneratePlugins.es.js +12 -16
  21. package/dist/components/RichTextEditor/Plugins/GeneratePlugins.es.js.map +1 -1
  22. package/dist/components/RichTextEditor/Plugins/LinkPlugin/LinkMarkupElement/LinkMarkupElementNode.es.js.map +1 -1
  23. package/dist/components/RichTextEditor/RichTextEditor.es.js +19 -19
  24. package/dist/components/RichTextEditor/RichTextEditor.es.js.map +1 -1
  25. package/dist/components/RichTextEditor/Toolbar/index.d.ts +1 -1
  26. package/dist/components/RichTextEditor/Toolbar/index.es.js +19 -18
  27. package/dist/components/RichTextEditor/Toolbar/index.es.js.map +1 -1
  28. package/dist/components/RichTextEditor/Toolbar/types.d.ts +0 -2
  29. package/dist/components/RichTextEditor/context/RichTextEditorContext.d.ts +1 -1
  30. package/dist/components/RichTextEditor/context/RichTextEditorContext.es.js +16 -17
  31. package/dist/components/RichTextEditor/context/RichTextEditorContext.es.js.map +1 -1
  32. package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.d.ts +1 -2
  33. package/dist/components/RichTextEditor/serializer/utils/serializeLeafToHtml.es.js.map +1 -1
  34. package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.d.ts +1 -2
  35. package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js +23 -19
  36. package/dist/components/RichTextEditor/serializer/utils/serializeNodeToHtmlRecursive.es.js.map +1 -1
  37. package/dist/components/Tooltip/Tooltip.d.ts +2 -1
  38. package/dist/components/Tooltip/Tooltip.es.js +97 -92
  39. package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
  40. package/dist/components/Tree/Node.d.ts +4 -2
  41. package/dist/components/Tree/Node.es.js +105 -99
  42. package/dist/components/Tree/Node.es.js.map +1 -1
  43. package/dist/components/Tree/Tree.d.ts +2 -0
  44. package/dist/components/Tree/Tree.es.js +39 -35
  45. package/dist/components/Tree/Tree.es.js.map +1 -1
  46. package/dist/components/index.d.ts +2 -0
  47. package/dist/index.cjs.js +4 -4
  48. package/dist/index.cjs.js.map +1 -1
  49. package/dist/index.es.js +3608 -3600
  50. package/dist/index.es.js.map +1 -1
  51. package/dist/index.umd.js +4 -4
  52. package/dist/index.umd.js.map +1 -1
  53. package/dist/styles.css +1 -1
  54. package/dist/utilities/dnd/DndWrapper.es.js.map +1 -1
  55. package/package.json +1 -1
@@ -1,21 +1,21 @@
1
- import { Button as D } from "../Button/Button.es.js";
2
- import { ButtonStyle as $, ButtonEmphasis as P, ButtonSize as V } from "../Button/ButtonTypes.es.js";
3
- import { IconSize as Y } from "../../foundation/Icon/IconSize.es.js";
4
- import { useLink as se } from "@react-aria/link";
5
- import { FOCUS_VISIBLE_STYLE as ne } from "../../utilities/focusStyle.es.js";
1
+ import { Button as P } from "../Button/Button.es.js";
2
+ import { ButtonStyle as V, ButtonEmphasis as Y, ButtonSize as j } from "../Button/ButtonTypes.es.js";
3
+ import { IconSize as q } from "../../foundation/Icon/IconSize.es.js";
4
+ import { useLink as ne } from "@react-aria/link";
5
+ import { FOCUS_VISIBLE_STYLE as ce } from "../../utilities/focusStyle.es.js";
6
6
  import { merge as c } from "../../utilities/merge.es.js";
7
- import e, { useRef as f, useMemo as ce, useState as j, useCallback as h, useEffect as we, cloneElement as S } from "react";
8
- import { BrightHeader as me, brightHeaderArrowBackgroundColors as x } from "./BrightHeader.es.js";
9
- import { usePopper as fe } from "react-popper";
10
- import { createPortal as de } from "react-dom";
11
- const q = {
7
+ import e, { useRef as d, useMemo as me, useState as D, useCallback as S, useEffect as we, cloneElement as x } from "react";
8
+ import { BrightHeader as fe, brightHeaderArrowBackgroundColors as v } from "./BrightHeader.es.js";
9
+ import { usePopper as de } from "react-popper";
10
+ import { createPortal as pe } from "react-dom";
11
+ const G = {
12
12
  small: "tw-pt-3.5",
13
13
  large: "tw-pt-4"
14
- }, G = {
14
+ }, J = {
15
15
  small: "tw-pb-3.5",
16
16
  large: "tw-pb-4"
17
17
  };
18
- var pe = /* @__PURE__ */ ((t) => (t.Top = "Top", t.Right = "Right", t.Bottom = "Bottom", t.Left = "Left", t))(pe || {}), ie = /* @__PURE__ */ ((t) => (t.Start = "Start", t.Middle = "Middle", t.End = "End", t))(ie || {});
18
+ var ie = /* @__PURE__ */ ((t) => (t.Top = "Top", t.Right = "Right", t.Bottom = "Bottom", t.Left = "Left", t))(ie || {}), ue = /* @__PURE__ */ ((t) => (t.Start = "Start", t.Middle = "Middle", t.End = "End", t))(ue || {});
19
19
  const be = {
20
20
  ["Top-Start"]: "top-start",
21
21
  ["Top-End"]: "top-end",
@@ -29,164 +29,169 @@ const be = {
29
29
  ["Right-Middle"]: "right",
30
30
  ["Bottom-Middle"]: "bottom",
31
31
  ["Left-Middle"]: "left"
32
- }, ue = (t, o, n) => {
32
+ }, Ee = (t, a, n) => {
33
33
  switch (!0) {
34
34
  case t.toString().includes("Top".toLowerCase()):
35
35
  return "before:tw-border-t-0 before:tw-border-l-0 tw-bottom-[-6px] before:tw-bg-black-100 before:dark:tw-bg-white";
36
36
  case t.toString().includes("Right".toLowerCase()):
37
37
  return c([
38
38
  "before:tw-border-t-0 before:tw-border-r-0 tw-left-[-6px]",
39
- o && n === "Start" ? x[o] : "before:tw-bg-black-100 before:dark:tw-bg-white"
39
+ a && n === "Start" ? v[a] : "before:tw-bg-black-100 before:dark:tw-bg-white"
40
40
  ]);
41
41
  case t.toString().includes("Bottom".toLowerCase()):
42
42
  return c([
43
43
  "before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px]",
44
- o ? x[o] : "before:tw-bg-black-100 before:dark:tw-bg-white"
44
+ a ? v[a] : "before:tw-bg-black-100 before:dark:tw-bg-white"
45
45
  ]);
46
46
  case t.toString().includes("Left".toLowerCase()):
47
47
  return c([
48
48
  "before:tw-border-b-0 before:tw-border-l-0 tw-right-[-6px]",
49
- o && n === "Start" ? x[o] : "before:tw-bg-black-100 before:dark:tw-bg-white"
49
+ a && n === "Start" ? v[a] : "before:tw-bg-black-100 before:dark:tw-bg-white"
50
50
  ]);
51
51
  default:
52
52
  return "before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px] before:tw-bg-black-100 before:dark:tw-bg-white";
53
53
  }
54
- }, Re = ({
54
+ }, Te = ({
55
55
  content: t,
56
- tooltipIcon: o,
56
+ tooltipIcon: a,
57
57
  heading: n,
58
- headingIcon: d,
59
- linkUrl: l,
58
+ headingIcon: p,
59
+ linkUrl: s,
60
60
  linkLabel: b,
61
61
  brightHeader: w,
62
62
  buttons: r,
63
- children: J,
64
- position: v = "Bottom",
65
- alignment: B = "Middle",
66
- withArrow: p,
67
- flip: K = !0,
68
- triggerElement: k,
69
- hoverDelay: C = 200,
70
- open: M = !1,
71
- disabled: Q = !1,
72
- hidden: W = !1
63
+ children: K,
64
+ position: B = "Bottom",
65
+ alignment: k = "Middle",
66
+ withArrow: i,
67
+ flip: Q = !0,
68
+ triggerElement: C,
69
+ hoverDelay: M = 200,
70
+ enterDelay: E = 0,
71
+ open: L = !1,
72
+ disabled: W = !1,
73
+ hidden: X = !1
73
74
  }) => {
74
- var T, O;
75
- const m = f(null), L = f(null), { linkProps: X } = se({}, L), Z = ce(() => l || w || r || n || d, [l, w, r, n, d]), A = be[`${v}-${B}`], u = f(null), R = f(null), [H, U] = j(null), ee = p ? 10 : 5, i = fe(m == null ? void 0 : m.current, u.current, {
76
- placement: A,
75
+ var O, F;
76
+ const f = d(null), R = d(null), { linkProps: Z } = ne({}, R), A = me(() => s || w || r || n || p, [s, w, r, n, p]), H = be[`${B}-${k}`], g = d(null), T = d(null), [U, ee] = D(null), te = i ? 10 : 5, u = de(f == null ? void 0 : f.current, g.current, {
77
+ placement: H,
77
78
  strategy: "fixed",
78
79
  modifiers: [
79
80
  {
80
81
  name: "arrow",
81
82
  options: {
82
- element: H
83
+ element: U
83
84
  }
84
85
  },
85
86
  {
86
87
  name: "offset",
87
88
  options: {
88
- offset: [0, ee]
89
+ offset: [0, te]
89
90
  }
90
91
  },
91
92
  {
92
93
  name: "flip",
93
- enabled: K
94
+ enabled: Q
94
95
  }
95
96
  ]
96
- }), te = (O = (T = i.state) == null ? void 0 : T.placement) != null ? O : v, re = ue(te, w, B), [oe, a] = j(!1), E = f(null), y = h(() => {
97
- E.current && clearTimeout(E.current), a(!0);
98
- }, []), N = h(() => {
99
- E.current = setTimeout(() => a(!1), C);
100
- }, [C]), z = h((s) => {
101
- var I, _;
102
- const F = (_ = s.path) != null ? _ : (I = s.composedPath) == null ? void 0 : I.call(s);
103
- F && [m, R, u].some((g) => F.includes(g == null ? void 0 : g.current)) && y();
104
- }, [y]), ae = !!((r == null ? void 0 : r.length) || (l == null ? void 0 : l.length)), le = {
105
- onMouseOver: (s) => z(s.nativeEvent),
97
+ }), re = (F = (O = u.state) == null ? void 0 : O.placement) != null ? F : B, oe = Ee(re, w, k), [ae, o] = D(!1), m = d(null), N = S(() => {
98
+ m.current && clearTimeout(m.current), m.current = setTimeout(() => o(!1), M);
99
+ }, [M]), z = S(() => {
100
+ if (m.current && clearTimeout(m.current), E) {
101
+ m.current = setTimeout(() => o(!0), E);
102
+ return;
103
+ }
104
+ o(!0);
105
+ }, [E]), y = S((l) => {
106
+ var _, $;
107
+ const I = ($ = l.path) != null ? $ : (_ = l.composedPath) == null ? void 0 : _.call(l);
108
+ I && [f, T, g].some((h) => I.includes(h == null ? void 0 : h.current)) && z();
109
+ }, [z]), se = !!((r == null ? void 0 : r.length) || (s == null ? void 0 : s.length)), le = {
110
+ onMouseOver: (l) => y(l.nativeEvent),
106
111
  onMouseLeave: N,
107
- onFocus: () => a(!0),
108
- onBlur: () => ae ? null : a(!1)
112
+ onFocus: () => o(!0),
113
+ onBlur: () => se ? null : o(!1)
109
114
  };
110
115
  return we(() => {
111
- a(M);
112
- }, [M]), /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", {
116
+ o(L);
117
+ }, [L]), /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("div", {
113
118
  ...le,
114
- ref: R
115
- }, k && S(k, {
116
- ref: m
117
- })), oe && !Q && de(/* @__PURE__ */ e.createElement("div", {
118
- ref: u,
119
+ ref: T
120
+ }, C && x(C, {
121
+ ref: f
122
+ })), ae && !W && pe(/* @__PURE__ */ e.createElement("div", {
123
+ ref: g,
119
124
  className: c([
120
125
  "tw-popper-container tw-inline-block tw-max-w-[200px] tw-bg-black-100 dark:tw-bg-white tw-rounded-md tw-shadow-mid tw-text-white dark:tw-text-black-100 tw-z-[120000]",
121
- W && "tw-hidden"
126
+ X && "tw-hidden"
122
127
  ]),
123
128
  "data-test-id": "tooltip",
124
129
  role: "tooltip",
125
- style: i.styles.popper,
126
- ...i.attributes.popper,
127
- onFocus: () => a(!0),
128
- onMouseOver: (s) => z(s.nativeEvent),
130
+ style: u.styles.popper,
131
+ ...u.attributes.popper,
132
+ onFocus: () => o(!0),
133
+ onMouseOver: (l) => y(l.nativeEvent),
129
134
  onMouseLeave: N
130
- }, w && /* @__PURE__ */ e.createElement(me, {
135
+ }, w && /* @__PURE__ */ e.createElement(fe, {
131
136
  headerStyle: w
132
137
  }), /* @__PURE__ */ e.createElement("div", {
133
138
  className: c([
134
139
  "tw-px-4",
135
- Z ? q.small : q.large,
136
- l ? G.small : G.large
140
+ A ? G.small : G.large,
141
+ s ? J.small : J.large
137
142
  ])
138
143
  }, n && /* @__PURE__ */ e.createElement("h4", {
139
144
  className: "tw-flex tw-text-m tw-font-bold tw-mb-1"
140
- }, d && /* @__PURE__ */ e.createElement("span", {
145
+ }, p && /* @__PURE__ */ e.createElement("span", {
141
146
  className: "tw-mr-1.5"
142
- }, S(d, { size: Y.Size20 })), n), /* @__PURE__ */ e.createElement("div", {
147
+ }, x(p, { size: q.Size20 })), n), /* @__PURE__ */ e.createElement("div", {
143
148
  className: "tw-flex"
144
- }, o && /* @__PURE__ */ e.createElement("span", {
149
+ }, a && /* @__PURE__ */ e.createElement("span", {
145
150
  className: "tw-shrink-0 tw-mr-1"
146
- }, S(o, { size: Y.Size16 })), /* @__PURE__ */ e.createElement("p", {
151
+ }, x(a, { size: q.Size16 })), /* @__PURE__ */ e.createElement("p", {
147
152
  className: "tw-text-s tw-min-w-0 tw-break-words"
148
- }, t)), l && /* @__PURE__ */ e.createElement("a", {
149
- ...X,
153
+ }, t)), s && /* @__PURE__ */ e.createElement("a", {
154
+ ...Z,
150
155
  "data-test-id": "tooltip-link",
151
- ref: L,
152
- href: l,
156
+ ref: R,
157
+ href: s,
153
158
  target: "_blank",
154
159
  rel: "noopener noreferrer",
155
160
  className: c([
156
161
  "tw-text-xs tw-text-black-40 dark:tw-text-black-80 tw-underline tw-mt-1",
157
- ne
162
+ ce
158
163
  ]),
159
- onBlur: () => r && r.length > 0 ? null : a(!1)
164
+ onBlur: () => r && r.length > 0 ? null : o(!1)
160
165
  }, b != null ? b : "Click here to learn more."), r && /* @__PURE__ */ e.createElement("div", {
161
166
  className: "tw-flex tw-flex-row-reverse tw-gap-x-1 tw-mt-4"
162
167
  }, r.length > 0 && /* @__PURE__ */ e.createElement("div", {
163
- onBlur: () => r && r.length < 2 ? a(!1) : null
164
- }, /* @__PURE__ */ e.createElement(D, {
165
- style: $.Default,
166
- emphasis: P.Strong,
167
- size: V.Small,
168
+ onBlur: () => r && r.length < 2 ? o(!1) : null
169
+ }, /* @__PURE__ */ e.createElement(P, {
170
+ style: V.Default,
171
+ emphasis: Y.Strong,
172
+ size: j.Small,
168
173
  onClick: r[0].action
169
174
  }, r[0].label)), r.length === 2 && /* @__PURE__ */ e.createElement("div", {
170
- onBlur: () => a(!1)
171
- }, /* @__PURE__ */ e.createElement(D, {
172
- style: $.Default,
173
- emphasis: P.Default,
174
- size: V.Small,
175
+ onBlur: () => o(!1)
176
+ }, /* @__PURE__ */ e.createElement(P, {
177
+ style: V.Default,
178
+ emphasis: Y.Default,
179
+ size: j.Small,
175
180
  onClick: r[1].action
176
181
  }, r[1].label))), /* @__PURE__ */ e.createElement("div", {
177
182
  "data-test-id": "popover-arrow",
178
- "data-popper-arrow": p,
179
- ref: U,
180
- style: i.styles.arrow,
183
+ "data-popper-arrow": i,
184
+ ref: ee,
185
+ style: u.styles.arrow,
181
186
  className: c([
182
- p && "tw-popper-arrow 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",
183
- p && re
187
+ i && "tw-popper-arrow 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",
188
+ i && oe
184
189
  ])
185
- })), J), document.body));
190
+ })), K), document.body));
186
191
  };
187
192
  export {
188
- Re as Tooltip,
189
- ie as TooltipAlignment,
190
- pe as TooltipPosition
193
+ Te as Tooltip,
194
+ ue as TooltipAlignment,
195
+ ie as TooltipPosition
191
196
  };
192
197
  //# 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 HTMLAttributes,\n PropsWithChildren,\n ReactChild,\n ReactElement,\n ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { BrightHeader, BrightHeaderStyle, brightHeaderArrowBackgroundColors } from './BrightHeader';\nimport { usePopper } from 'react-popper';\nimport { createPortal } from 'react-dom';\nimport { Placement } from '@popperjs/core';\n\nexport type TooltipButton = {\n label: string;\n action: () => void;\n};\n\nexport type TooltipProps = PropsWithChildren<{\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?: ReactChild;\n position?: TooltipPosition;\n alignment?: TooltipAlignment;\n flip?: boolean;\n withArrow?: boolean;\n hoverDelay?: number;\n open?: boolean;\n disabled?: boolean;\n hidden?: 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-bg-black-100 before:dark:tw-bg-white';\n case currentPlacement.toString().includes(TooltipPosition.Right.toLowerCase()):\n return merge([\n 'before:tw-border-t-0 before:tw-border-r-0 tw-left-[-6px]',\n brightHeader && alignment === TooltipAlignment.Start\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-bg-black-100 before:dark:tw-bg-white',\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\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-bg-black-100 before:dark:tw-bg-white',\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-[-6px]',\n brightHeader && alignment === TooltipAlignment.Start\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-bg-black-100 before:dark:tw-bg-white',\n ]);\n default:\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px] before:tw-bg-black-100 before:dark:tw-bg-white';\n }\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 open = false,\n disabled = false,\n hidden = false,\n}: TooltipProps) => {\n const triggerRefElement = useRef<HTMLElement | HTMLDivElement | HTMLButtonElement | null>(null);\n const linkRef = useRef<HTMLAnchorElement | null>(null);\n const { linkProps } = useLink({}, 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 = useRef<HTMLDivElement | null>(null);\n const triggerElementContainerRef = useRef<HTMLDivElement | null>(null);\n const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);\n\n const tooltipOffset = withArrow ? 10 : 5;\n const popperInstance = usePopper(triggerRefElement?.current, tooltipContainerRef.current, {\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 handleShowTooltipOnHover = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsOpen(true);\n }, []);\n\n const handleHideTooltipOnHover = useCallback(() => {\n timeoutRef.current = setTimeout(() => setIsOpen(false), hoverDelay);\n }, [hoverDelay]);\n\n const checkIfHovered = useCallback(\n (event) => {\n const hoveredElement = event.path ?? event.composedPath?.();\n const hoverSources = [triggerRefElement, triggerElementContainerRef, tooltipContainerRef];\n\n if (hoveredElement && hoverSources.some((el) => hoveredElement.includes(el?.current))) {\n handleShowTooltipOnHover();\n }\n },\n [handleShowTooltipOnHover],\n );\n\n const hasInteractiveElements = !!(buttons?.length || linkUrl?.length);\n const triggerProps: HTMLAttributes<HTMLElement> = {\n onMouseOver: (event) => checkIfHovered(event.nativeEvent),\n onMouseLeave: handleHideTooltipOnHover,\n onFocus: () => setIsOpen(true),\n onBlur: () => (!hasInteractiveElements ? setIsOpen(false) : null),\n };\n\n useEffect(() => {\n setIsOpen(open);\n }, [open]);\n\n return (\n <>\n <div {...triggerProps} ref={triggerElementContainerRef}>\n {triggerElement &&\n cloneElement(triggerElement, {\n ref: triggerRefElement,\n })}\n </div>\n {isOpen &&\n !disabled &&\n createPortal(\n <div\n ref={tooltipContainerRef}\n className={merge([\n 'tw-popper-container tw-inline-block tw-max-w-[200px] tw-bg-black-100 dark:tw-bg-white tw-rounded-md tw-shadow-mid tw-text-white dark:tw-text-black-100 tw-z-[120000]',\n hidden && 'tw-hidden',\n ])}\n data-test-id=\"tooltip\"\n role=\"tooltip\"\n style={popperInstance.styles.popper}\n {...popperInstance.attributes.popper}\n onFocus={() => setIsOpen(true)}\n onMouseOver={(event) => checkIfHovered(event.nativeEvent)}\n onMouseLeave={handleHideTooltipOnHover}\n >\n {brightHeader && <BrightHeader headerStyle={brightHeader} />}\n <div\n className={merge([\n 'tw-px-4',\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\">\n {cloneElement(tooltipIcon, { size: IconSize.Size16 })}\n </span>\n )}\n <p className=\"tw-text-s tw-min-w-0 tw-break-words\">{content}</p>\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 dark:tw-text-black-80 tw-underline tw-mt-1',\n FOCUS_VISIBLE_STYLE,\n ])}\n onBlur={() => (buttons && buttons.length > 0 ? null : setIsOpen(false))}\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 <div onBlur={() => (buttons && buttons.length < 2 ? setIsOpen(false) : null)}>\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Strong}\n size={ButtonSize.Small}\n onClick={buttons[0].action}\n >\n {buttons[0].label}\n </Button>\n </div>\n )}\n {buttons.length === 2 && (\n <div onBlur={() => setIsOpen(false)}>\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Default}\n size={ButtonSize.Small}\n onClick={buttons[1].action}\n >\n {buttons[1].label}\n </Button>\n </div>\n )}\n </div>\n )}\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-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 document.body,\n )}\n </>\n );\n};\n"],"names":[],"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 HTMLAttributes,\n PropsWithChildren,\n ReactChild,\n ReactElement,\n ReactNode,\n cloneElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { BrightHeader, BrightHeaderStyle, brightHeaderArrowBackgroundColors } from './BrightHeader';\nimport { usePopper } from 'react-popper';\nimport { createPortal } from 'react-dom';\nimport { Placement } from '@popperjs/core';\n\nexport type TooltipButton = {\n label: string;\n action: () => void;\n};\n\nexport type TooltipProps = PropsWithChildren<{\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?: ReactChild;\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 hidden?: 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-bg-black-100 before:dark:tw-bg-white';\n case currentPlacement.toString().includes(TooltipPosition.Right.toLowerCase()):\n return merge([\n 'before:tw-border-t-0 before:tw-border-r-0 tw-left-[-6px]',\n brightHeader && alignment === TooltipAlignment.Start\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-bg-black-100 before:dark:tw-bg-white',\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\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-bg-black-100 before:dark:tw-bg-white',\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-[-6px]',\n brightHeader && alignment === TooltipAlignment.Start\n ? brightHeaderArrowBackgroundColors[brightHeader]\n : 'before:tw-bg-black-100 before:dark:tw-bg-white',\n ]);\n default:\n return 'before:tw-border-b-0 before:tw-border-r-0 tw-top-[-6px] before:tw-bg-black-100 before:dark:tw-bg-white';\n }\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 hidden = false,\n}: TooltipProps) => {\n const triggerRefElement = useRef<HTMLElement | HTMLDivElement | HTMLButtonElement | null>(null);\n const linkRef = useRef<HTMLAnchorElement | null>(null);\n const { linkProps } = useLink({}, 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 = useRef<HTMLDivElement | null>(null);\n const triggerElementContainerRef = useRef<HTMLDivElement | null>(null);\n const [arrowElement, setArrowElement] = useState<HTMLDivElement | null>(null);\n\n const tooltipOffset = withArrow ? 10 : 5;\n const popperInstance = usePopper(triggerRefElement?.current, tooltipContainerRef.current, {\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) => {\n const hoveredElement = event.path ?? event.composedPath?.();\n const hoverSources = [triggerRefElement, triggerElementContainerRef, tooltipContainerRef];\n\n if (hoveredElement && hoverSources.some((el) => hoveredElement.includes(el?.current))) {\n handleShowTooltipOnHover();\n }\n },\n [handleShowTooltipOnHover],\n );\n\n const hasInteractiveElements = !!(buttons?.length || linkUrl?.length);\n const triggerProps: HTMLAttributes<HTMLElement> = {\n onMouseOver: (event) => checkIfHovered(event.nativeEvent),\n onMouseLeave: handleHideTooltipOnHover,\n onFocus: () => setIsOpen(true),\n onBlur: () => (!hasInteractiveElements ? setIsOpen(false) : null),\n };\n\n useEffect(() => {\n setIsOpen(open);\n }, [open]);\n\n return (\n <>\n <div {...triggerProps} ref={triggerElementContainerRef}>\n {triggerElement &&\n cloneElement(triggerElement, {\n ref: triggerRefElement,\n })}\n </div>\n {isOpen &&\n !disabled &&\n createPortal(\n <div\n ref={tooltipContainerRef}\n className={merge([\n 'tw-popper-container tw-inline-block tw-max-w-[200px] tw-bg-black-100 dark:tw-bg-white tw-rounded-md tw-shadow-mid tw-text-white dark:tw-text-black-100 tw-z-[120000]',\n hidden && 'tw-hidden',\n ])}\n data-test-id=\"tooltip\"\n role=\"tooltip\"\n style={popperInstance.styles.popper}\n {...popperInstance.attributes.popper}\n onFocus={() => setIsOpen(true)}\n onMouseOver={(event) => checkIfHovered(event.nativeEvent)}\n onMouseLeave={handleHideTooltipOnHover}\n >\n {brightHeader && <BrightHeader headerStyle={brightHeader} />}\n <div\n className={merge([\n 'tw-px-4',\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\">\n {cloneElement(tooltipIcon, { size: IconSize.Size16 })}\n </span>\n )}\n <p className=\"tw-text-s tw-min-w-0 tw-break-words\">{content}</p>\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 dark:tw-text-black-80 tw-underline tw-mt-1',\n FOCUS_VISIBLE_STYLE,\n ])}\n onBlur={() => (buttons && buttons.length > 0 ? null : setIsOpen(false))}\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 <div onBlur={() => (buttons && buttons.length < 2 ? setIsOpen(false) : null)}>\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Strong}\n size={ButtonSize.Small}\n onClick={buttons[0].action}\n >\n {buttons[0].label}\n </Button>\n </div>\n )}\n {buttons.length === 2 && (\n <div onBlur={() => setIsOpen(false)}>\n <Button\n style={ButtonStyle.Default}\n emphasis={ButtonEmphasis.Default}\n size={ButtonSize.Small}\n onClick={buttons[1].action}\n >\n {buttons[1].label}\n </Button>\n </div>\n )}\n </div>\n )}\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-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 document.body,\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { DraggableItem } from '../../utilities/dnd';
5
5
  export declare type RenderNodeArrayData = Omit<NodeProps, 'isFirst' | 'strong' | 'node'> & {
6
6
  nodes: DraggableItem<TreeNodeItem>[];
7
7
  };
8
- export declare const renderNodeArray: ({ nodes, activeIds, treeId, onClick, onDrop, onEditableSave, parentIds, }: RenderNodeArrayData) => JSX.Element[];
8
+ export declare const renderNodeArray: ({ nodes, activeIds, treeId, onClick, onDrop, onEditableSave, onNodeExpand, forceCaret, parentIds, }: RenderNodeArrayData) => JSX.Element[];
9
9
  export interface TreeNodeItem extends TreeFlatListItem {
10
10
  nodes?: DraggableItem<TreeNodeItem>[];
11
11
  }
@@ -20,6 +20,8 @@ declare type NodeProps = {
20
20
  treeId: string;
21
21
  onDrop?: OnDropCallback<TreeNodeItem>;
22
22
  onEditableSave?: (targetItemId: string, value: string) => void;
23
+ forceCaret?: boolean;
24
+ onNodeExpand?: (itemId: string) => void;
23
25
  };
24
- export declare const Node: ({ node, strong, activeIds, onClick, parentIds, isFirst, onDrop, onEditableSave, treeId, }: NodeProps) => ReactElement<NodeProps>;
26
+ export declare const Node: ({ node, strong, activeIds, onClick, parentIds, isFirst, onDrop, onEditableSave, onNodeExpand, treeId, }: NodeProps) => ReactElement<NodeProps>;
25
27
  export {};