@frontify/fondue 12.0.0-beta.14 → 12.0.0-beta.17

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 (77) 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/CheckboxListPlugin/CheckboxListButton/CheckboxListToolbarButton.es.js +8 -8
  20. package/dist/components/RichTextEditor/Plugins/CheckboxListPlugin/CheckboxListButton/CheckboxListToolbarButton.es.js.map +1 -1
  21. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/CustomFloatingLink.es.js +4 -2
  22. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/CustomFloatingLink.es.js.map +1 -1
  23. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/EditLinkModal/useFloatingLinkEdit.es.js +32 -27
  24. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/EditLinkModal/useFloatingLinkEdit.es.js.map +1 -1
  25. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/FloatingLink.es.js +13 -6
  26. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/FloatingLink.es.js.map +1 -1
  27. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/InsertLinkModal/index.d.ts +1 -0
  28. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/InsertLinkModal/useFloatingLinkInsert.d.ts +2 -0
  29. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/InsertLinkModal/useFloatingLinkInsert.es.js +38 -0
  30. package/dist/components/RichTextEditor/Plugins/LinkPlugin/FloatingLink/InsertLinkModal/useFloatingLinkInsert.es.js.map +1 -0
  31. package/dist/components/RichTextEditor/Plugins/LinkPlugin/LinkMarkupElement/LinkMarkupElementNode.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 +10 -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 +10 -4
  52. package/dist/index.umd.js.map +1 -1
  53. package/dist/node_modules/@udecode/plate-core/dist/index.es.es.js +1482 -0
  54. package/dist/node_modules/@udecode/plate-core/dist/index.es.es.js.map +1 -0
  55. package/dist/node_modules/@udecode/plate-floating/dist/index.es.es.js +21 -0
  56. package/dist/node_modules/@udecode/plate-floating/dist/index.es.es.js.map +1 -0
  57. package/dist/node_modules/@udecode/zustood/dist/index.es.es.js +439 -0
  58. package/dist/node_modules/@udecode/zustood/dist/index.es.es.js.map +1 -0
  59. package/dist/node_modules/@udecode/zustood/node_modules/react-tracked/dist/index.modern.es.js +21 -0
  60. package/dist/node_modules/@udecode/zustood/node_modules/react-tracked/dist/index.modern.es.js.map +1 -0
  61. package/dist/node_modules/hotkeys-js/dist/hotkeys.esm.es.js +275 -0
  62. package/dist/node_modules/hotkeys-js/dist/hotkeys.esm.es.js.map +1 -0
  63. package/dist/node_modules/jotai/esm/index.es.js +418 -0
  64. package/dist/node_modules/jotai/esm/index.es.js.map +1 -0
  65. package/dist/node_modules/proxy-compare/dist/index.modern.es.js +74 -0
  66. package/dist/node_modules/proxy-compare/dist/index.modern.es.js.map +1 -0
  67. package/dist/node_modules/react-hotkeys-hook/dist/react-hotkeys-hook.esm.es.js +7 -0
  68. package/dist/node_modules/react-hotkeys-hook/dist/react-hotkeys-hook.esm.es.js.map +1 -0
  69. package/dist/node_modules/zustand/esm/index.es.js +62 -0
  70. package/dist/node_modules/zustand/esm/index.es.js.map +1 -0
  71. package/dist/node_modules/zustand/esm/middleware.es.js +219 -0
  72. package/dist/node_modules/zustand/esm/middleware.es.js.map +1 -0
  73. package/dist/node_modules/zustand/esm/vanilla.es.js +26 -0
  74. package/dist/node_modules/zustand/esm/vanilla.es.js.map +1 -0
  75. package/dist/styles.css +1 -1
  76. package/dist/utilities/dnd/DndWrapper.es.js.map +1 -1
  77. package/package.json +3 -3
@@ -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 {};