se-design 1.0.92 → 1.0.94
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/assets/icons/share.svg +6 -0
- package/dist/assets/style.css +1 -1
- package/dist/components/OnboardingTour/index.d.ts +4 -0
- package/dist/index12.js +2 -2
- package/dist/index13.js +2 -2
- package/dist/index16.js +1 -1
- package/dist/index183.js +1 -1
- package/dist/index183.js.map +1 -1
- package/dist/index184.js +1 -1
- package/dist/index184.js.map +1 -1
- package/dist/index185.js +1 -1
- package/dist/index185.js.map +1 -1
- package/dist/index186.js +1 -1
- package/dist/index186.js.map +1 -1
- package/dist/index187.js +1 -1
- package/dist/index187.js.map +1 -1
- package/dist/index188.js +1 -1
- package/dist/index188.js.map +1 -1
- package/dist/index189.js +1 -1
- package/dist/index189.js.map +1 -1
- package/dist/index19.js +1 -1
- package/dist/index190.js +1 -1
- package/dist/index190.js.map +1 -1
- package/dist/index191.js +2 -2
- package/dist/index191.js.map +1 -1
- package/dist/index192.js +2 -2
- package/dist/index192.js.map +1 -1
- package/dist/index193.js +1 -1
- package/dist/index193.js.map +1 -1
- package/dist/index194.js +1 -1
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +2 -2
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +2 -2
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +1 -1
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +1 -1
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +1 -1
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +1 -1
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +1 -1
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +1 -1
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +1 -1
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +1 -1
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +1 -1
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +2 -2
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +2 -2
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +2 -2
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +2 -149
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +149 -9
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +8 -5
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +5 -42
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +40 -18
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +24 -0
- package/dist/index214.js.map +1 -0
- package/dist/index221.js +24 -68
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +75 -0
- package/dist/index222.js.map +1 -0
- package/dist/{index228.js → index229.js} +1 -1
- package/dist/{index228.js.map → index229.js.map} +1 -1
- package/dist/{index230.js → index231.js} +1 -1
- package/dist/{index230.js.map → index231.js.map} +1 -1
- package/dist/{index238.js → index239.js} +1 -1
- package/dist/{index238.js.map → index239.js.map} +1 -1
- package/dist/index24.js +1 -1
- package/dist/{index241.js → index242.js} +1 -1
- package/dist/{index241.js.map → index242.js.map} +1 -1
- package/dist/index251.js +169 -3
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +7 -0
- package/dist/index252.js.map +1 -0
- package/dist/index254.js +18 -9
- package/dist/index254.js.map +1 -1
- package/dist/index255.js +9 -9
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +9 -4
- package/dist/index256.js.map +1 -1
- package/dist/index257.js +5 -170
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +170 -11
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +11 -6
- package/dist/index259.js.map +1 -1
- package/dist/index26.js +1 -1
- package/dist/index260.js +5 -5
- package/dist/index260.js.map +1 -1
- package/dist/index261.js +5 -37
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +38 -2
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +2 -8
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +7 -326
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +324 -47
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +50 -2
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +2 -76
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +65 -82
- package/dist/index268.js.map +1 -1
- package/dist/index269.js +89 -48
- package/dist/index269.js.map +1 -1
- package/dist/index270.js +51 -7
- package/dist/index270.js.map +1 -1
- package/dist/index271.js +7 -4
- package/dist/index271.js.map +1 -1
- package/dist/index272.js +4 -51
- package/dist/index272.js.map +1 -1
- package/dist/index273.js +52 -2
- package/dist/index273.js.map +1 -1
- package/dist/index274.js +2 -2
- package/dist/index275.js +5 -0
- package/dist/index275.js.map +1 -0
- package/dist/index29.js +2 -2
- package/dist/index30.js +1 -1
- package/dist/index31.js +1 -1
- package/dist/index33.js +11 -10
- package/dist/index34.js +1 -1
- package/dist/index36.js +1 -1
- package/dist/index37.js +1 -1
- package/dist/index38.js +1 -1
- package/dist/index39.js +1 -1
- package/dist/index40.js +2 -2
- package/dist/index41.js +1 -1
- package/dist/index43.js +8 -7
- package/dist/index44.js +3 -2
- package/dist/index46.js +1 -1
- package/dist/index51.js +2 -2
- package/dist/index54.js +1 -1
- package/dist/index56.js +1 -1
- package/dist/index57.js +1 -1
- package/dist/index58.js +1 -1
- package/dist/index6.js +39 -37
- package/dist/index6.js.map +1 -1
- package/dist/index60.js +17 -16
- package/dist/index62.js +1 -1
- package/dist/index66.js +1 -1
- package/dist/index67.js +78 -67
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +1 -1
- package/dist/index7.js +9 -8
- package/dist/index70.js +3 -2
- package/dist/index84.js +1 -1
- package/dist/index86.js +1 -1
- package/dist/index9.js +1 -1
- package/package.json +1 -1
- package/dist/index220.js +0 -31
- package/dist/index220.js.map +0 -1
- package/dist/index250.js +0 -173
- package/dist/index250.js.map +0 -1
- package/dist/index253.js +0 -22
- package/dist/index253.js.map +0 -1
package/dist/index60.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import t from "react";
|
|
2
2
|
/* empty css */
|
|
3
3
|
const n = ({
|
|
4
4
|
element: e,
|
|
@@ -15,12 +15,12 @@ const n = ({
|
|
|
15
15
|
"--shimmer-base-color": s,
|
|
16
16
|
"--shimmer-highlight-color": m
|
|
17
17
|
}, r = `se-design-shimmer-element se-design-shimmer-${e.type}`;
|
|
18
|
-
return /* @__PURE__ */
|
|
18
|
+
return /* @__PURE__ */ t.createElement("div", {
|
|
19
19
|
className: r,
|
|
20
20
|
style: i
|
|
21
|
-
}, e.children && e.children.map((
|
|
21
|
+
}, e.children && e.children.map((a, p) => /* @__PURE__ */ t.createElement(n, {
|
|
22
22
|
key: p,
|
|
23
|
-
element:
|
|
23
|
+
element: a,
|
|
24
24
|
animationDuration: d,
|
|
25
25
|
baseColor: s,
|
|
26
26
|
highlightColor: m
|
|
@@ -40,48 +40,48 @@ const n = ({
|
|
|
40
40
|
alignItems: e.alignItems,
|
|
41
41
|
flex: e.flex
|
|
42
42
|
};
|
|
43
|
-
return /* @__PURE__ */
|
|
43
|
+
return /* @__PURE__ */ t.createElement("div", {
|
|
44
44
|
className: `se-design-shimmer-container ${e.className || ""}`,
|
|
45
45
|
style: i
|
|
46
|
-
}, e.children.map((r,
|
|
47
|
-
key:
|
|
46
|
+
}, e.children.map((r, a) => r.type === "container" ? /* @__PURE__ */ t.createElement(y, {
|
|
47
|
+
key: a,
|
|
48
48
|
container: r,
|
|
49
49
|
animationDuration: d,
|
|
50
50
|
baseColor: s,
|
|
51
51
|
highlightColor: m
|
|
52
|
-
}) : /* @__PURE__ */
|
|
53
|
-
key:
|
|
52
|
+
}) : /* @__PURE__ */ t.createElement(n, {
|
|
53
|
+
key: a,
|
|
54
54
|
element: r,
|
|
55
55
|
animationDuration: d,
|
|
56
56
|
baseColor: s,
|
|
57
57
|
highlightColor: m
|
|
58
58
|
})));
|
|
59
|
-
},
|
|
59
|
+
}, l = ({
|
|
60
60
|
structure: e,
|
|
61
61
|
className: d = "",
|
|
62
62
|
animationDuration: s = 3,
|
|
63
63
|
baseColor: m = "var(--color-gray-700)",
|
|
64
64
|
highlightColor: i = "var(--color-gray-600)",
|
|
65
65
|
width: r,
|
|
66
|
-
height:
|
|
66
|
+
height: a
|
|
67
67
|
}) => {
|
|
68
68
|
const p = {
|
|
69
69
|
width: r ? typeof r == "number" ? `${r}px` : r : "100%",
|
|
70
|
-
height:
|
|
70
|
+
height: a ? typeof a == "number" ? `${a}px` : a : "auto",
|
|
71
71
|
"--shimmer-duration": `${s}s`,
|
|
72
72
|
"--shimmer-base-color": m,
|
|
73
73
|
"--shimmer-highlight-color": i
|
|
74
74
|
};
|
|
75
|
-
return /* @__PURE__ */
|
|
75
|
+
return /* @__PURE__ */ t.createElement("div", {
|
|
76
76
|
className: `se-design-shimmer-loader ${d}`,
|
|
77
77
|
style: p
|
|
78
|
-
}, e.map((c, o) => c.type === "container" ? /* @__PURE__ */
|
|
78
|
+
}, e.map((c, o) => c.type === "container" ? /* @__PURE__ */ t.createElement(y, {
|
|
79
79
|
key: o,
|
|
80
80
|
container: c,
|
|
81
81
|
animationDuration: s,
|
|
82
82
|
baseColor: m,
|
|
83
83
|
highlightColor: i
|
|
84
|
-
}) : /* @__PURE__ */
|
|
84
|
+
}) : /* @__PURE__ */ t.createElement(n, {
|
|
85
85
|
key: o,
|
|
86
86
|
element: c,
|
|
87
87
|
animationDuration: s,
|
|
@@ -90,6 +90,7 @@ const n = ({
|
|
|
90
90
|
})));
|
|
91
91
|
};
|
|
92
92
|
export {
|
|
93
|
-
|
|
93
|
+
l as ShimmerLoader,
|
|
94
|
+
l as default
|
|
94
95
|
};
|
|
95
96
|
//# sourceMappingURL=index60.js.map
|
package/dist/index62.js
CHANGED
package/dist/index66.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import n, { useState as u, useCallback as y, useEffect as P } from "react";
|
|
2
2
|
import { Popover as I } from "./index19.js";
|
|
3
|
-
import { useStableId as k } from "./
|
|
3
|
+
import { useStableId as k } from "./index212.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
function p() {
|
|
6
6
|
return p = Object.assign ? Object.assign.bind() : function(r) {
|
package/dist/index67.js
CHANGED
|
@@ -1,32 +1,35 @@
|
|
|
1
|
-
import o, { useState as
|
|
2
|
-
import { Button as
|
|
3
|
-
import { Tooltip as
|
|
1
|
+
import o, { useState as U, useRef as P, useCallback as m, useEffect as k } from "react";
|
|
2
|
+
import { Button as M } from "./index4.js";
|
|
3
|
+
import { Tooltip as Y } from "./index16.js";
|
|
4
|
+
import { Icon as K } from "./index6.js";
|
|
4
5
|
/* empty css */
|
|
5
|
-
const
|
|
6
|
+
const f = {
|
|
6
7
|
gotIt: "got_it",
|
|
7
8
|
finish: "finish",
|
|
8
9
|
next: "next",
|
|
9
10
|
back: "back"
|
|
10
|
-
},
|
|
11
|
-
steps:
|
|
11
|
+
}, te = ({
|
|
12
|
+
steps: t = [],
|
|
12
13
|
screenBaseElementSelector: T = "",
|
|
13
14
|
handleCloseProductTour: d,
|
|
14
15
|
tourType: g = "",
|
|
15
|
-
automationId:
|
|
16
|
-
highlightBorderRadius:
|
|
16
|
+
automationId: h = "onboarding-tour",
|
|
17
|
+
highlightBorderRadius: w = 6,
|
|
18
|
+
customClassName: W = "",
|
|
19
|
+
showSkipCTA: v = !1,
|
|
17
20
|
labels: A
|
|
18
21
|
}) => {
|
|
19
|
-
const [
|
|
20
|
-
next:
|
|
21
|
-
gotIt:
|
|
22
|
-
finish:
|
|
23
|
-
skip:
|
|
24
|
-
stepInfo:
|
|
25
|
-
} = A || {}, s = document.querySelector(T),
|
|
22
|
+
const [e, y] = U(0), c = P(null), l = P(null), {
|
|
23
|
+
next: O = "Next",
|
|
24
|
+
gotIt: V = "Got It",
|
|
25
|
+
finish: z = "Finish",
|
|
26
|
+
skip: $ = "Skip tour",
|
|
27
|
+
stepInfo: F = "Step {step} of {total}"
|
|
28
|
+
} = A || {}, s = document.querySelector(T), x = m(() => {
|
|
26
29
|
let n;
|
|
27
|
-
if (
|
|
30
|
+
if (e >= t.length)
|
|
28
31
|
return n;
|
|
29
|
-
const i = document.querySelector(e
|
|
32
|
+
const i = document.querySelector(t[e]?.targetElementContainerSelector ? t[e].targetElementContainerSelector : t[e]?.targetElementSelector);
|
|
30
33
|
if (!i)
|
|
31
34
|
return n;
|
|
32
35
|
const r = i.getBoundingClientRect();
|
|
@@ -37,56 +40,56 @@ const u = {
|
|
|
37
40
|
behavior: "auto",
|
|
38
41
|
block: "end"
|
|
39
42
|
})), n = setTimeout(() => {
|
|
40
|
-
const
|
|
41
|
-
if (!
|
|
43
|
+
const I = document.querySelector(t[e]?.targetElementSelector);
|
|
44
|
+
if (!I || !c.current || !l.current)
|
|
42
45
|
return;
|
|
43
|
-
const a =
|
|
46
|
+
const a = I.getBoundingClientRect(), p = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);
|
|
44
47
|
c.current.style.height = `${p}px`;
|
|
45
|
-
const
|
|
48
|
+
const u = t[e]?.targetElementGap || {
|
|
46
49
|
horizontal: 0,
|
|
47
50
|
vertical: 0
|
|
48
|
-
},
|
|
49
|
-
<svg width="${
|
|
51
|
+
}, C = w * 2, R = a.left - u.horizontal, _ = a.top + window.scrollY - u.vertical, G = a.right + u.horizontal, q = a.bottom + window.scrollY + u.vertical, B = G - R, D = q - _, L = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), H = encodeURIComponent(`
|
|
52
|
+
<svg width="${L}" height="${p}" xmlns="http://www.w3.org/2000/svg">
|
|
50
53
|
<defs>
|
|
51
|
-
<mask id="highlight-mask-${
|
|
52
|
-
<rect x="0" y="0" width="${
|
|
53
|
-
<rect x="${
|
|
54
|
+
<mask id="highlight-mask-${e}">
|
|
55
|
+
<rect x="0" y="0" width="${L}" height="${p}" fill="white"/>
|
|
56
|
+
<rect x="${R}" y="${_}" width="${B}" height="${D}" rx="${C}" ry="${C}" fill="black"/>
|
|
54
57
|
</mask>
|
|
55
58
|
</defs>
|
|
56
59
|
</svg>
|
|
57
60
|
`);
|
|
58
|
-
c.current.style.maskImage = `url("data:image/svg+xml,${
|
|
61
|
+
c.current.style.maskImage = `url("data:image/svg+xml,${H}#highlight-mask-${e}")`, c.current.style.webkitMaskImage = `url("data:image/svg+xml,${H}#highlight-mask-${e}")`, l.current.style.top = `${a.top}px`, l.current.style.left = `${a.left}px`, l.current.style.width = `${a.width}px`, l.current.style.height = `${a.height}px`, l.current.style.borderRadius = `${w}px`;
|
|
59
62
|
}, 50), n;
|
|
60
|
-
}, [
|
|
63
|
+
}, [e, t]), N = m(() => {
|
|
61
64
|
d(), s && s.scrollTo({
|
|
62
65
|
top: 0,
|
|
63
66
|
behavior: "smooth"
|
|
64
67
|
});
|
|
65
|
-
}, [d, s]),
|
|
66
|
-
n?.preventDefault(), n?.stopPropagation(),
|
|
68
|
+
}, [d, s]), b = m((n) => {
|
|
69
|
+
n?.preventDefault(), n?.stopPropagation(), e < t.length - 1 ? y((i) => i + 1) : (d(n), s && s.scrollTo({
|
|
67
70
|
top: 0,
|
|
68
71
|
behavior: "smooth"
|
|
69
|
-
})), e
|
|
72
|
+
})), t[e]?.tourMixPanelHandler?.({
|
|
70
73
|
user_path: g,
|
|
71
|
-
action_type: `clicked_${
|
|
74
|
+
action_type: `clicked_${e === t.length - 1 ? t.length === 1 ? f.gotIt : f.finish : f.next}`
|
|
72
75
|
});
|
|
73
|
-
}, [
|
|
74
|
-
|
|
76
|
+
}, [e, t, d, g, s]), S = m(() => {
|
|
77
|
+
e > 0 && y((n) => n - 1), t[e]?.tourMixPanelHandler?.({
|
|
75
78
|
user_path: g,
|
|
76
|
-
action_type: `clicked_${
|
|
79
|
+
action_type: `clicked_${f.back}`
|
|
77
80
|
});
|
|
78
|
-
}, [
|
|
79
|
-
(n.keyCode === 37 || n.key === "ArrowLeft") &&
|
|
80
|
-
}, [
|
|
81
|
-
return
|
|
82
|
-
window.removeEventListener("keydown",
|
|
83
|
-
}), [
|
|
81
|
+
}, [e, t, g]), E = m((n) => {
|
|
82
|
+
(n.keyCode === 37 || n.key === "ArrowLeft") && e > 0 && S(), (n.keyCode === 39 || n.key === "ArrowRight") && b();
|
|
83
|
+
}, [e, b, S]);
|
|
84
|
+
return k(() => (window.addEventListener("keydown", E), () => {
|
|
85
|
+
window.removeEventListener("keydown", E);
|
|
86
|
+
}), [E]), k(() => {
|
|
84
87
|
let n;
|
|
85
|
-
return
|
|
88
|
+
return e < t.length && (n = x()), () => {
|
|
86
89
|
n && clearTimeout(n);
|
|
87
90
|
};
|
|
88
|
-
}, [
|
|
89
|
-
if (
|
|
91
|
+
}, [e, t, x]), k(() => {
|
|
92
|
+
if (e < t.length && c.current) {
|
|
90
93
|
const n = c.current, i = (r) => {
|
|
91
94
|
r.preventDefault(), r.stopPropagation();
|
|
92
95
|
};
|
|
@@ -100,49 +103,57 @@ const u = {
|
|
|
100
103
|
n.removeEventListener("wheel", i), n.removeEventListener("touchmove", i), n.removeEventListener("scroll", i);
|
|
101
104
|
};
|
|
102
105
|
}
|
|
103
|
-
}, [
|
|
106
|
+
}, [e]), !t || t.length === 0 ? null : /* @__PURE__ */ o.createElement(o.Fragment, null, /* @__PURE__ */ o.createElement("div", {
|
|
104
107
|
className: "se-design-onboarding-tour-overlay",
|
|
105
108
|
ref: c,
|
|
106
|
-
"data-automation-id": `${
|
|
107
|
-
}), /* @__PURE__ */ o.createElement(
|
|
109
|
+
"data-automation-id": `${h}-overlay`
|
|
110
|
+
}), /* @__PURE__ */ o.createElement(Y, {
|
|
108
111
|
content: /* @__PURE__ */ o.createElement("div", {
|
|
109
|
-
className:
|
|
110
|
-
}, e
|
|
111
|
-
src: e
|
|
112
|
+
className: `se-design-onboarding-tour-tooltip-content ${W}`
|
|
113
|
+
}, t[e]?.content?.illustration && /* @__PURE__ */ o.createElement("img", {
|
|
114
|
+
src: t[e].content.illustration,
|
|
112
115
|
className: "se-design-onboarding-tour-illustration",
|
|
113
116
|
alt: "illustration"
|
|
114
117
|
}), /* @__PURE__ */ o.createElement("div", {
|
|
115
118
|
className: "se-design-onboarding-tour-content"
|
|
116
|
-
}, e
|
|
117
|
-
className: "se-design-onboarding-tour-
|
|
118
|
-
},
|
|
119
|
-
className:
|
|
120
|
-
}, e
|
|
119
|
+
}, (t[e]?.content?.title || !v) && /* @__PURE__ */ o.createElement("div", {
|
|
120
|
+
className: "se-design-onboarding-tour-header"
|
|
121
|
+
}, t[e]?.content?.title && /* @__PURE__ */ o.createElement("p", {
|
|
122
|
+
className: `se-design-onboarding-tour-title ${t[e].content.titleClassName || ""}`
|
|
123
|
+
}, t[e].content.title), !v && /* @__PURE__ */ o.createElement(K, {
|
|
124
|
+
name: "close",
|
|
125
|
+
onClick: N,
|
|
126
|
+
ariaLabel: $,
|
|
127
|
+
className: "se-design-onboarding-tour-close-icon cursor-pointer",
|
|
128
|
+
automationId: `${h}-skip-button`
|
|
129
|
+
})), t[e]?.content?.description && /* @__PURE__ */ o.createElement("p", {
|
|
130
|
+
className: `se-design-onboarding-tour-description ${t[e].content.descriptionClassName || ""}`
|
|
131
|
+
}, t[e].content.description)), /* @__PURE__ */ o.createElement("div", {
|
|
121
132
|
className: "se-design-onboarding-tour-actions"
|
|
122
|
-
},
|
|
133
|
+
}, t.length > 1 && /* @__PURE__ */ o.createElement("span", {
|
|
123
134
|
className: "steps"
|
|
124
|
-
},
|
|
135
|
+
}, F.replace("{step}", `${e + 1}`).replace("{total}", `${t.length}`)), /* @__PURE__ */ o.createElement("div", {
|
|
125
136
|
className: "btns-container"
|
|
126
|
-
},
|
|
137
|
+
}, v && e !== t.length - 1 && /* @__PURE__ */ o.createElement(M, {
|
|
127
138
|
theme: "white",
|
|
128
139
|
type: "link",
|
|
129
|
-
label:
|
|
130
|
-
automationId: `${
|
|
131
|
-
onClick:
|
|
132
|
-
}), /* @__PURE__ */ o.createElement(
|
|
140
|
+
label: $,
|
|
141
|
+
automationId: `${h}-skip-button`,
|
|
142
|
+
onClick: N
|
|
143
|
+
}), /* @__PURE__ */ o.createElement(M, {
|
|
133
144
|
theme: "white",
|
|
134
145
|
type: "primary",
|
|
135
146
|
size: "sm",
|
|
136
|
-
label:
|
|
137
|
-
automationId: `${
|
|
138
|
-
onClick:
|
|
147
|
+
label: e === t.length - 1 ? t.length === 1 ? V : z : O,
|
|
148
|
+
automationId: `${h}-next-button`,
|
|
149
|
+
onClick: b
|
|
139
150
|
})))),
|
|
140
151
|
tooltipSrc: /* @__PURE__ */ o.createElement("div", {
|
|
141
152
|
className: "blocker",
|
|
142
153
|
ref: l
|
|
143
154
|
}),
|
|
144
155
|
tooltipSrcRef: l,
|
|
145
|
-
position: e
|
|
156
|
+
position: t[e]?.tooltipPosition || "bottom-center",
|
|
146
157
|
tooltipOffset: 16,
|
|
147
158
|
displayOn: "always-on",
|
|
148
159
|
isWithPortal: !0,
|
|
@@ -150,6 +161,6 @@ const u = {
|
|
|
150
161
|
}));
|
|
151
162
|
};
|
|
152
163
|
export {
|
|
153
|
-
|
|
164
|
+
te as OnboardingTour
|
|
154
165
|
};
|
|
155
166
|
//# sourceMappingURL=index67.js.map
|
package/dist/index67.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index67.js","sources":["../src/components/OnboardingTour/index.tsx"],"sourcesContent":["import React, { FC, useEffect, useRef, useState, useCallback } from 'react';\n\nimport { Button } from 'components/Button';\nimport { Tooltip } from 'components/Tooltip';\n\nimport './style.scss';\n\nconst TOUR_NAVIGATION_STEPS = {\n gotIt: 'got_it',\n finish: 'finish',\n next: 'next',\n back: 'back'\n};\n\nexport interface TourStep {\n targetElementSelector: string;\n targetElementContainerSelector?: string;\n targetElementGap?: {\n horizontal: number;\n vertical: number;\n };\n tooltipPosition?:\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'left-top'\n | 'left-center'\n | 'left-bottom'\n | 'right-top'\n | 'right-center'\n | 'right-bottom';\n content: {\n title?: string;\n description?: string;\n illustration?: any;\n };\n tourMixPanelHandler?: (data: { user_path: string; action_type: string }) => void;\n}\n\nexport interface OnboardingTourProps {\n steps: TourStep[];\n screenBaseElementSelector: string;\n handleCloseProductTour: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n tourType?: string;\n highlightBorderRadius?: number;\n automationId?: string;\n labels?: {\n next: string;\n gotIt: string;\n finish: string;\n skip: string;\n stepInfo: string;\n };\n}\n\nexport const OnboardingTour: FC<OnboardingTourProps> = ({\n steps = [],\n screenBaseElementSelector = '',\n handleCloseProductTour,\n tourType = '',\n automationId = 'onboarding-tour',\n highlightBorderRadius = 6,\n labels\n}) => {\n const [currentStep, setCurrentStep] = useState(0);\n const overlayRef = useRef<HTMLDivElement>(null);\n const blockerRef = useRef<HTMLDivElement>(null);\n\n const {\n next = 'Next',\n gotIt = 'Got It',\n finish = 'Finish',\n skip = 'Skip tour',\n stepInfo = 'Step {step} of {total}'\n } = labels || {};\n\n const parentScreenElement = document.querySelector(screenBaseElementSelector) as HTMLElement | null;\n\n const clipTargetElementAndPositionTooltip = useCallback(() => {\n let timerId: any;\n\n if (currentStep >= steps.length) {\n return timerId;\n }\n\n // get the target element\n const initialTargetElement = document.querySelector(\n steps[currentStep]?.targetElementContainerSelector\n ? steps[currentStep].targetElementContainerSelector\n : steps[currentStep]?.targetElementSelector\n ) as HTMLElement | null;\n\n if (!initialTargetElement) {\n return timerId;\n }\n\n const initialTargetArea = initialTargetElement.getBoundingClientRect();\n\n // check whether target element is fully visible in viewport\n const isFullyVisible =\n initialTargetArea.top >= 0 &&\n initialTargetArea.left >= 0 &&\n initialTargetArea.bottom <= window.innerHeight &&\n initialTargetArea.right <= window.innerWidth;\n\n if (!isFullyVisible) {\n if (initialTargetArea.top < 0) {\n initialTargetElement.scrollIntoView({ behavior: 'auto', block: 'start' });\n } else if (initialTargetArea.bottom > window.innerHeight) {\n initialTargetElement.scrollIntoView({ behavior: 'auto', block: 'end' });\n }\n }\n\n // if the target element is visible, then clip the target element and position the tooltip\n timerId = setTimeout(() => {\n const targetElement = document.querySelector(steps[currentStep]?.targetElementSelector) as HTMLElement | null;\n\n if (!targetElement || !overlayRef.current || !blockerRef.current) {\n return;\n }\n\n const targetArea = targetElement.getBoundingClientRect();\n\n const documentHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n\n // Update overlay dimensions and calculate target element area to focus\n overlayRef.current.style.height = `${documentHeight}px`;\n\n // Providing gap around target element\n const targetElementGap = steps[currentStep]?.targetElementGap || { horizontal: 0, vertical: 0 };\n\n // clip the target element with rounded corners\n const borderRadius = highlightBorderRadius * 2;\n const left = targetArea.left - targetElementGap.horizontal;\n const top = targetArea.top + window.scrollY - targetElementGap.vertical;\n const right = targetArea.right + targetElementGap.horizontal;\n const bottom = targetArea.bottom + window.scrollY + targetElementGap.vertical;\n const width = right - left;\n const height = bottom - top;\n const documentWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);\n\n // Create SVG mask with rounded rectangle hole\n const svgMask = encodeURIComponent(`\n <svg width=\"${documentWidth}\" height=\"${documentHeight}\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <mask id=\"highlight-mask-${currentStep}\">\n <rect x=\"0\" y=\"0\" width=\"${documentWidth}\" height=\"${documentHeight}\" fill=\"white\"/>\n <rect x=\"${left}\" y=\"${top}\" width=\"${width}\" height=\"${height}\" rx=\"${borderRadius}\" ry=\"${borderRadius}\" fill=\"black\"/>\n </mask>\n </defs>\n </svg>\n `);\n\n // Apply created mask to the overlay\n overlayRef.current.style.maskImage = `url(\"data:image/svg+xml,${svgMask}#highlight-mask-${currentStep}\")`;\n overlayRef.current.style.webkitMaskImage = `url(\"data:image/svg+xml,${svgMask}#highlight-mask-${currentStep}\")`;\n\n // Position blocker over clipped area to avoid clicks on the target element\n blockerRef.current.style.top = `${targetArea.top}px`;\n blockerRef.current.style.left = `${targetArea.left}px`;\n blockerRef.current.style.width = `${targetArea.width}px`;\n blockerRef.current.style.height = `${targetArea.height}px`;\n blockerRef.current.style.borderRadius = `${highlightBorderRadius}px`;\n }, 50);\n\n return timerId;\n }, [currentStep, steps]);\n\n const handleSkipTour = useCallback(() => {\n handleCloseProductTour();\n if (parentScreenElement) {\n parentScreenElement.scrollTo({ top: 0, behavior: 'smooth' });\n }\n }, [handleCloseProductTour, parentScreenElement]);\n\n const handleNextClick = useCallback(\n (e?: React.MouseEvent<HTMLButtonElement>) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n if (currentStep < steps.length - 1) {\n setCurrentStep((prev) => prev + 1);\n } else {\n handleCloseProductTour(e);\n if (parentScreenElement) {\n parentScreenElement.scrollTo({ top: 0, behavior: 'smooth' });\n }\n }\n steps[currentStep]?.tourMixPanelHandler?.({\n user_path: tourType,\n action_type: `clicked_${\n currentStep === steps.length - 1\n ? steps.length === 1\n ? TOUR_NAVIGATION_STEPS.gotIt\n : TOUR_NAVIGATION_STEPS.finish\n : TOUR_NAVIGATION_STEPS.next\n }`\n });\n },\n [currentStep, steps, handleCloseProductTour, tourType, parentScreenElement]\n );\n\n const handlePrevClick = useCallback(() => {\n if (currentStep > 0) {\n setCurrentStep((prev) => prev - 1);\n }\n steps[currentStep]?.tourMixPanelHandler?.({\n user_path: tourType,\n action_type: `clicked_${TOUR_NAVIGATION_STEPS.back}`\n });\n }, [currentStep, steps, tourType]);\n\n const handleKeyPress = useCallback(\n (e: KeyboardEvent) => {\n if (e.keyCode === 37 || e.key === 'ArrowLeft') {\n // for previous navigation\n if (currentStep > 0) {\n handlePrevClick();\n }\n }\n if (e.keyCode === 39 || e.key === 'ArrowRight') {\n // for next navigation\n handleNextClick();\n }\n },\n [currentStep, handleNextClick, handlePrevClick]\n );\n\n useEffect(() => {\n // Adding event listener for keydown\n window.addEventListener('keydown', handleKeyPress);\n\n return () => {\n window.removeEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n useEffect(() => {\n let timerId: any;\n if (currentStep < steps.length) {\n timerId = clipTargetElementAndPositionTooltip();\n }\n\n return () => {\n if (timerId) {\n clearTimeout(timerId);\n }\n };\n }, [currentStep, steps, clipTargetElementAndPositionTooltip]);\n\n // To prevent scroll when tour is active\n useEffect(() => {\n if (currentStep < steps.length && overlayRef.current) {\n const overlay = overlayRef.current;\n\n const preventScroll = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n overlay.addEventListener('wheel', preventScroll, { passive: false });\n overlay.addEventListener('touchmove', preventScroll, { passive: false });\n overlay.addEventListener('scroll', preventScroll, { passive: false });\n\n return () => {\n overlay.removeEventListener('wheel', preventScroll);\n overlay.removeEventListener('touchmove', preventScroll);\n overlay.removeEventListener('scroll', preventScroll);\n };\n }\n }, [currentStep]);\n\n if (!steps || steps.length === 0) {\n return null;\n }\n\n return (\n <>\n <div\n className=\"se-design-onboarding-tour-overlay\"\n ref={overlayRef}\n data-automation-id={`${automationId}-overlay`}\n />\n\n <Tooltip\n content={\n <div className=\"se-design-onboarding-tour-tooltip-content\">\n {steps[currentStep]?.content?.illustration && (\n <img\n src={steps[currentStep].content.illustration}\n className=\"se-design-onboarding-tour-illustration\"\n alt=\"illustration\"\n />\n )}\n <div className=\"se-design-onboarding-tour-content\">\n {steps[currentStep]?.content?.title && (\n <p className=\"se-design-onboarding-tour-title\">{steps[currentStep].content.title}</p>\n )}\n {steps[currentStep]?.content?.description && (\n <p className=\"se-design-onboarding-tour-description\">{steps[currentStep].content.description}</p>\n )}\n </div>\n\n <div className=\"se-design-onboarding-tour-actions\">\n {steps.length > 1 && (\n <span className=\"steps\">\n {stepInfo.replace('{step}', `${currentStep + 1}`).replace('{total}', `${steps.length}`)}\n </span>\n )}\n <div className=\"btns-container\">\n {currentStep !== steps.length - 1 && (\n <Button\n theme=\"white\"\n type=\"link\"\n label={skip}\n automationId={`${automationId}-skip-button`}\n onClick={handleSkipTour}\n />\n )}\n <Button\n theme=\"white\"\n type=\"primary\"\n size=\"sm\"\n label={currentStep === steps.length - 1 ? (steps.length === 1 ? gotIt : finish) : next}\n automationId={`${automationId}-next-button`}\n onClick={handleNextClick}\n />\n </div>\n </div>\n </div>\n }\n tooltipSrc={<div className=\"blocker\" ref={blockerRef} />}\n tooltipSrcRef={blockerRef as React.RefObject<HTMLDivElement>}\n position={steps[currentStep]?.tooltipPosition || 'bottom-center'}\n tooltipOffset={16}\n displayOn=\"always-on\"\n isWithPortal={true}\n maxWidth={384}\n />\n </>\n );\n};\n"],"names":["React__default","useState","useRef","useCallback","useEffect","Button","Tooltip","TOUR_NAVIGATION_STEPS","gotIt","finish","next","back","OnboardingTour","steps","screenBaseElementSelector","handleCloseProductTour","tourType","automationId","highlightBorderRadius","labels","currentStep","setCurrentStep","overlayRef","blockerRef","skip","stepInfo","parentScreenElement","document","querySelector","clipTargetElementAndPositionTooltip","timerId","length","initialTargetElement","targetElementContainerSelector","targetElementSelector","initialTargetArea","getBoundingClientRect","top","left","bottom","window","innerHeight","right","innerWidth","scrollIntoView","behavior","block","setTimeout","targetElement","current","targetArea","documentHeight","Math","max","documentElement","scrollHeight","body","style","height","targetElementGap","horizontal","vertical","borderRadius","scrollY","width","documentWidth","scrollWidth","svgMask","encodeURIComponent","maskImage","webkitMaskImage","handleSkipTour","scrollTo","handleNextClick","e","preventDefault","stopPropagation","prev","tourMixPanelHandler","user_path","action_type","handlePrevClick","handleKeyPress","keyCode","key","addEventListener","removeEventListener","clearTimeout","overlay","preventScroll","passive","createElement","React","Fragment","className","ref","content","illustration","src","alt","title","description","replace","theme","type","label","onClick","size","tooltipSrc","tooltipSrcRef","position","tooltipPosition","tooltipOffset","displayOn","isWithPortal","maxWidth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index67.js","sources":["../src/components/OnboardingTour/index.tsx"],"sourcesContent":["import React, { FC, useEffect, useRef, useState, useCallback } from 'react';\n\nimport { Button } from 'components/Button';\nimport { Tooltip } from 'components/Tooltip';\nimport { Icon } from 'components/Icon';\n\nimport './style.scss';\n\nconst TOUR_NAVIGATION_STEPS = {\n gotIt: 'got_it',\n finish: 'finish',\n next: 'next',\n back: 'back'\n};\n\nexport interface TourStep {\n targetElementSelector: string;\n targetElementContainerSelector?: string;\n targetElementGap?: {\n horizontal: number;\n vertical: number;\n };\n tooltipPosition?:\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'left-top'\n | 'left-center'\n | 'left-bottom'\n | 'right-top'\n | 'right-center'\n | 'right-bottom';\n content: {\n title?: string;\n description?: string;\n illustration?: any;\n titleClassName?: string;\n descriptionClassName?: string;\n };\n tourMixPanelHandler?: (data: { user_path: string; action_type: string }) => void;\n}\n\nexport interface OnboardingTourProps {\n steps: TourStep[];\n screenBaseElementSelector: string;\n handleCloseProductTour: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n tourType?: string;\n highlightBorderRadius?: number;\n automationId?: string;\n customClassName?: string;\n showSkipCTA?: boolean;\n labels?: {\n next: string;\n gotIt: string;\n finish: string;\n skip: string;\n stepInfo: string;\n };\n}\n\nexport const OnboardingTour: FC<OnboardingTourProps> = ({\n steps = [],\n screenBaseElementSelector = '',\n handleCloseProductTour,\n tourType = '',\n automationId = 'onboarding-tour',\n highlightBorderRadius = 6,\n customClassName = '',\n showSkipCTA = false,\n labels\n}) => {\n const [currentStep, setCurrentStep] = useState(0);\n const overlayRef = useRef<HTMLDivElement>(null);\n const blockerRef = useRef<HTMLDivElement>(null);\n\n const {\n next = 'Next',\n gotIt = 'Got It',\n finish = 'Finish',\n skip = 'Skip tour',\n stepInfo = 'Step {step} of {total}'\n } = labels || {};\n\n const parentScreenElement = document.querySelector(screenBaseElementSelector) as HTMLElement | null;\n\n const clipTargetElementAndPositionTooltip = useCallback(() => {\n let timerId: any;\n\n if (currentStep >= steps.length) {\n return timerId;\n }\n\n // get the target element\n const initialTargetElement = document.querySelector(\n steps[currentStep]?.targetElementContainerSelector\n ? steps[currentStep].targetElementContainerSelector\n : steps[currentStep]?.targetElementSelector\n ) as HTMLElement | null;\n\n if (!initialTargetElement) {\n return timerId;\n }\n\n const initialTargetArea = initialTargetElement.getBoundingClientRect();\n\n // check whether target element is fully visible in viewport\n const isFullyVisible =\n initialTargetArea.top >= 0 &&\n initialTargetArea.left >= 0 &&\n initialTargetArea.bottom <= window.innerHeight &&\n initialTargetArea.right <= window.innerWidth;\n\n if (!isFullyVisible) {\n if (initialTargetArea.top < 0) {\n initialTargetElement.scrollIntoView({ behavior: 'auto', block: 'start' });\n } else if (initialTargetArea.bottom > window.innerHeight) {\n initialTargetElement.scrollIntoView({ behavior: 'auto', block: 'end' });\n }\n }\n\n // if the target element is visible, then clip the target element and position the tooltip\n timerId = setTimeout(() => {\n const targetElement = document.querySelector(steps[currentStep]?.targetElementSelector) as HTMLElement | null;\n\n if (!targetElement || !overlayRef.current || !blockerRef.current) {\n return;\n }\n\n const targetArea = targetElement.getBoundingClientRect();\n\n const documentHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n\n // Update overlay dimensions and calculate target element area to focus\n overlayRef.current.style.height = `${documentHeight}px`;\n\n // Providing gap around target element\n const targetElementGap = steps[currentStep]?.targetElementGap || { horizontal: 0, vertical: 0 };\n\n // clip the target element with rounded corners\n const borderRadius = highlightBorderRadius * 2;\n const left = targetArea.left - targetElementGap.horizontal;\n const top = targetArea.top + window.scrollY - targetElementGap.vertical;\n const right = targetArea.right + targetElementGap.horizontal;\n const bottom = targetArea.bottom + window.scrollY + targetElementGap.vertical;\n const width = right - left;\n const height = bottom - top;\n const documentWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);\n\n // Create SVG mask with rounded rectangle hole\n const svgMask = encodeURIComponent(`\n <svg width=\"${documentWidth}\" height=\"${documentHeight}\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <mask id=\"highlight-mask-${currentStep}\">\n <rect x=\"0\" y=\"0\" width=\"${documentWidth}\" height=\"${documentHeight}\" fill=\"white\"/>\n <rect x=\"${left}\" y=\"${top}\" width=\"${width}\" height=\"${height}\" rx=\"${borderRadius}\" ry=\"${borderRadius}\" fill=\"black\"/>\n </mask>\n </defs>\n </svg>\n `);\n\n // Apply created mask to the overlay\n overlayRef.current.style.maskImage = `url(\"data:image/svg+xml,${svgMask}#highlight-mask-${currentStep}\")`;\n overlayRef.current.style.webkitMaskImage = `url(\"data:image/svg+xml,${svgMask}#highlight-mask-${currentStep}\")`;\n\n // Position blocker over clipped area to avoid clicks on the target element\n blockerRef.current.style.top = `${targetArea.top}px`;\n blockerRef.current.style.left = `${targetArea.left}px`;\n blockerRef.current.style.width = `${targetArea.width}px`;\n blockerRef.current.style.height = `${targetArea.height}px`;\n blockerRef.current.style.borderRadius = `${highlightBorderRadius}px`;\n }, 50);\n\n return timerId;\n }, [currentStep, steps]);\n\n const handleSkipTour = useCallback(() => {\n handleCloseProductTour();\n if (parentScreenElement) {\n parentScreenElement.scrollTo({ top: 0, behavior: 'smooth' });\n }\n }, [handleCloseProductTour, parentScreenElement]);\n\n const handleNextClick = useCallback(\n (e?: React.MouseEvent<HTMLButtonElement>) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n if (currentStep < steps.length - 1) {\n setCurrentStep((prev) => prev + 1);\n } else {\n handleCloseProductTour(e);\n if (parentScreenElement) {\n parentScreenElement.scrollTo({ top: 0, behavior: 'smooth' });\n }\n }\n steps[currentStep]?.tourMixPanelHandler?.({\n user_path: tourType,\n action_type: `clicked_${\n currentStep === steps.length - 1\n ? steps.length === 1\n ? TOUR_NAVIGATION_STEPS.gotIt\n : TOUR_NAVIGATION_STEPS.finish\n : TOUR_NAVIGATION_STEPS.next\n }`\n });\n },\n [currentStep, steps, handleCloseProductTour, tourType, parentScreenElement]\n );\n\n const handlePrevClick = useCallback(() => {\n if (currentStep > 0) {\n setCurrentStep((prev) => prev - 1);\n }\n steps[currentStep]?.tourMixPanelHandler?.({\n user_path: tourType,\n action_type: `clicked_${TOUR_NAVIGATION_STEPS.back}`\n });\n }, [currentStep, steps, tourType]);\n\n const handleKeyPress = useCallback(\n (e: KeyboardEvent) => {\n if (e.keyCode === 37 || e.key === 'ArrowLeft') {\n // for previous navigation\n if (currentStep > 0) {\n handlePrevClick();\n }\n }\n if (e.keyCode === 39 || e.key === 'ArrowRight') {\n // for next navigation\n handleNextClick();\n }\n },\n [currentStep, handleNextClick, handlePrevClick]\n );\n\n useEffect(() => {\n // Adding event listener for keydown\n window.addEventListener('keydown', handleKeyPress);\n\n return () => {\n window.removeEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n useEffect(() => {\n let timerId: any;\n if (currentStep < steps.length) {\n timerId = clipTargetElementAndPositionTooltip();\n }\n\n return () => {\n if (timerId) {\n clearTimeout(timerId);\n }\n };\n }, [currentStep, steps, clipTargetElementAndPositionTooltip]);\n\n // To prevent scroll when tour is active\n useEffect(() => {\n if (currentStep < steps.length && overlayRef.current) {\n const overlay = overlayRef.current;\n\n const preventScroll = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n overlay.addEventListener('wheel', preventScroll, { passive: false });\n overlay.addEventListener('touchmove', preventScroll, { passive: false });\n overlay.addEventListener('scroll', preventScroll, { passive: false });\n\n return () => {\n overlay.removeEventListener('wheel', preventScroll);\n overlay.removeEventListener('touchmove', preventScroll);\n overlay.removeEventListener('scroll', preventScroll);\n };\n }\n }, [currentStep]);\n\n if (!steps || steps.length === 0) {\n return null;\n }\n\n return (\n <>\n <div\n className=\"se-design-onboarding-tour-overlay\"\n ref={overlayRef}\n data-automation-id={`${automationId}-overlay`}\n />\n\n <Tooltip\n content={\n <div className={`se-design-onboarding-tour-tooltip-content ${customClassName}`}>\n {steps[currentStep]?.content?.illustration && (\n <img\n src={steps[currentStep].content.illustration}\n className=\"se-design-onboarding-tour-illustration\"\n alt=\"illustration\"\n />\n )}\n <div className=\"se-design-onboarding-tour-content\">\n {(steps[currentStep]?.content?.title || !showSkipCTA) && (\n <div className=\"se-design-onboarding-tour-header\">\n {steps[currentStep]?.content?.title && (\n <p\n className={`se-design-onboarding-tour-title ${steps[currentStep].content.titleClassName || ''}`}\n >\n {steps[currentStep].content.title}\n </p>\n )}\n {!showSkipCTA && (\n <Icon\n name=\"close\"\n onClick={handleSkipTour}\n ariaLabel={skip}\n className=\"se-design-onboarding-tour-close-icon cursor-pointer\"\n automationId={`${automationId}-skip-button`}\n />\n )}\n </div>\n )}\n {steps[currentStep]?.content?.description && (\n <p\n className={`se-design-onboarding-tour-description ${\n steps[currentStep].content.descriptionClassName || ''\n }`}\n >\n {steps[currentStep].content.description}\n </p>\n )}\n </div>\n\n <div className=\"se-design-onboarding-tour-actions\">\n {steps.length > 1 && (\n <span className=\"steps\">\n {stepInfo.replace('{step}', `${currentStep + 1}`).replace('{total}', `${steps.length}`)}\n </span>\n )}\n <div className=\"btns-container\">\n {showSkipCTA && currentStep !== steps.length - 1 && (\n <Button\n theme=\"white\"\n type=\"link\"\n label={skip}\n automationId={`${automationId}-skip-button`}\n onClick={handleSkipTour}\n />\n )}\n <Button\n theme=\"white\"\n type=\"primary\"\n size=\"sm\"\n label={currentStep === steps.length - 1 ? (steps.length === 1 ? gotIt : finish) : next}\n automationId={`${automationId}-next-button`}\n onClick={handleNextClick}\n />\n </div>\n </div>\n </div>\n }\n tooltipSrc={<div className=\"blocker\" ref={blockerRef} />}\n tooltipSrcRef={blockerRef as React.RefObject<HTMLDivElement>}\n position={steps[currentStep]?.tooltipPosition || 'bottom-center'}\n tooltipOffset={16}\n displayOn=\"always-on\"\n isWithPortal={true}\n maxWidth={384}\n />\n </>\n );\n};\n"],"names":["React__default","useState","useRef","useCallback","useEffect","Button","Tooltip","Icon","TOUR_NAVIGATION_STEPS","gotIt","finish","next","back","OnboardingTour","steps","screenBaseElementSelector","handleCloseProductTour","tourType","automationId","highlightBorderRadius","customClassName","showSkipCTA","labels","currentStep","setCurrentStep","overlayRef","blockerRef","skip","stepInfo","parentScreenElement","document","querySelector","clipTargetElementAndPositionTooltip","timerId","length","initialTargetElement","targetElementContainerSelector","targetElementSelector","initialTargetArea","getBoundingClientRect","top","left","bottom","window","innerHeight","right","innerWidth","scrollIntoView","behavior","block","setTimeout","targetElement","current","targetArea","documentHeight","Math","max","documentElement","scrollHeight","body","style","height","targetElementGap","horizontal","vertical","borderRadius","scrollY","width","documentWidth","scrollWidth","svgMask","encodeURIComponent","maskImage","webkitMaskImage","handleSkipTour","scrollTo","handleNextClick","e","preventDefault","stopPropagation","prev","tourMixPanelHandler","user_path","action_type","handlePrevClick","handleKeyPress","keyCode","key","addEventListener","removeEventListener","clearTimeout","overlay","preventScroll","passive","createElement","React","Fragment","className","ref","content","illustration","src","alt","title","titleClassName","name","onClick","ariaLabel","description","descriptionClassName","replace","theme","type","label","size","tooltipSrc","tooltipSrcRef","position","tooltipPosition","tooltipOffset","displayOn","isWithPortal","maxWidth"],"mappings":"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"}
|
package/dist/index68.js
CHANGED
|
@@ -2,7 +2,7 @@ import F, { useState as ot, useRef as X, useEffect as $ } from "react";
|
|
|
2
2
|
import { createPortal as nt } from "react-dom";
|
|
3
3
|
import { Icon as it } from "./index6.js";
|
|
4
4
|
import { Button as rt } from "./index4.js";
|
|
5
|
-
import { debounce as lt } from "./
|
|
5
|
+
import { debounce as lt } from "./index231.js";
|
|
6
6
|
const q = 500, S = 50, U = 150, st = {
|
|
7
7
|
"top-left": {
|
|
8
8
|
rotate: "315",
|
package/dist/index7.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import s, { useState as h, useCallback as i } from "react";
|
|
2
2
|
import "./index77.js";
|
|
3
|
-
import { isElementVisible as p } from "./
|
|
3
|
+
import { isElementVisible as p } from "./index211.js";
|
|
4
4
|
const x = ({
|
|
5
5
|
skipLinks: n,
|
|
6
|
-
className:
|
|
6
|
+
className: c = ""
|
|
7
7
|
}) => {
|
|
8
|
-
const [
|
|
8
|
+
const [r, u] = h(n), l = i(() => {
|
|
9
9
|
const t = n.filter((e) => {
|
|
10
10
|
const o = document.getElementById(e.id);
|
|
11
11
|
return p(o);
|
|
@@ -30,10 +30,10 @@ const x = ({
|
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
}, []);
|
|
33
|
-
return n.length === 0 ? null : /* @__PURE__ */
|
|
34
|
-
className: `se-design-skip-links-bar relative w-full h-0 overflow-hidden p-0 flex items-center justify-center bg-[var(--color-blue-50)] transition-[height] duration-300 ease-out focus-within:h-auto focus-within:py-1 focus-within:px-2 ${
|
|
33
|
+
return n.length === 0 ? null : /* @__PURE__ */ s.createElement("div", {
|
|
34
|
+
className: `se-design-skip-links-bar relative w-full h-0 overflow-hidden p-0 flex items-center justify-center bg-[var(--color-blue-50)] transition-[height] duration-300 ease-out focus-within:h-auto focus-within:py-1 focus-within:px-2 ${c}`,
|
|
35
35
|
onFocus: a
|
|
36
|
-
},
|
|
36
|
+
}, r.map((t) => /* @__PURE__ */ s.createElement("a", {
|
|
37
37
|
key: t.id,
|
|
38
38
|
href: `#${t.id}`,
|
|
39
39
|
className: "absolute -left-[9999px] [clip:rect(0,0,0,0)] no-underline text-[var(--color-blue-500)] text-md py-1 px-2.5 rounded capitalize focus:static focus:left-auto focus:[clip:auto] focus:outline-none focus-visible:!outline-none hover:text-[var(--color-blue-600)] hover:bg-[var(--color-blue-200)]",
|
|
@@ -43,6 +43,7 @@ const x = ({
|
|
|
43
43
|
}, t.label)));
|
|
44
44
|
};
|
|
45
45
|
export {
|
|
46
|
-
x as SkipLinksBar
|
|
46
|
+
x as SkipLinksBar,
|
|
47
|
+
x as default
|
|
47
48
|
};
|
|
48
49
|
//# sourceMappingURL=index7.js.map
|
package/dist/index70.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Badge as j } from "./index10.js";
|
|
|
4
4
|
import { Icon as q } from "./index6.js";
|
|
5
5
|
import { Link as N } from "./index69.js";
|
|
6
6
|
import { CustomModal as G } from "./index13.js";
|
|
7
|
-
import { useStableId as J } from "./
|
|
7
|
+
import { useStableId as J } from "./index212.js";
|
|
8
8
|
/* empty css */
|
|
9
9
|
const K = {
|
|
10
10
|
lg: {
|
|
@@ -142,6 +142,7 @@ const K = {
|
|
|
142
142
|
}));
|
|
143
143
|
};
|
|
144
144
|
export {
|
|
145
|
-
ea as Paywall
|
|
145
|
+
ea as Paywall,
|
|
146
|
+
ea as default
|
|
146
147
|
};
|
|
147
148
|
//# sourceMappingURL=index70.js.map
|
package/dist/index84.js
CHANGED
package/dist/index86.js
CHANGED
package/dist/index9.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import o from "react";
|
|
2
|
-
import { useStableId as A } from "./
|
|
2
|
+
import { useStableId as A } from "./index212.js";
|
|
3
3
|
import { getA11yNameAttributes as O } from "./index86.js";
|
|
4
4
|
import { useAccessiblePress as C } from "./index72.js";
|
|
5
5
|
import "./index77.js";
|
package/package.json
CHANGED
package/dist/index220.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { useCallback as y, useEffect as d } from "react";
|
|
2
|
-
function p({
|
|
3
|
-
containerRef: E,
|
|
4
|
-
onDismiss: e,
|
|
5
|
-
enabled: t = !0,
|
|
6
|
-
useDocumentListener: u = !1,
|
|
7
|
-
preventDefault: c = !0,
|
|
8
|
-
stopPropagation: n = !0
|
|
9
|
-
}) {
|
|
10
|
-
const f = y((r) => {
|
|
11
|
-
!t || !e || r.key !== "Escape" || (c && r.preventDefault(), n && r.stopPropagation(), e());
|
|
12
|
-
}, [t, e, c, n]);
|
|
13
|
-
return d(() => {
|
|
14
|
-
if (!u || !t || !e) return;
|
|
15
|
-
const r = E?.current, a = (o) => {
|
|
16
|
-
o.key === "Escape" && (r && !r.contains(document.activeElement) || (c && o.preventDefault(), n && o.stopPropagation(), e()));
|
|
17
|
-
};
|
|
18
|
-
return document.addEventListener("keydown", a, {
|
|
19
|
-
capture: !0
|
|
20
|
-
}), () => document.removeEventListener("keydown", a, {
|
|
21
|
-
capture: !0
|
|
22
|
-
});
|
|
23
|
-
}, [u, t, e, E, c, n]), {
|
|
24
|
-
onKeyDown: u ? () => {
|
|
25
|
-
} : f
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
export {
|
|
29
|
-
p as useDismissOnEscape
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=index220.js.map
|
package/dist/index220.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index220.js","sources":["../src/utils/a11y/useDismissOnEscape.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDismissOnEscapeOptions<T extends HTMLElement = HTMLElement> {\n /**\n * Container element ref — used for focus-check in document-level mode,\n * and for the returned onKeyDown in React-event mode.\n */\n containerRef?: RefObject<T | null>;\n /**\n * Callback when Escape key is pressed.\n */\n onDismiss?: () => void;\n /**\n * Whether the Escape handler is active.\n * Default: true\n */\n enabled?: boolean;\n /**\n * Use a native document-level capture listener instead of React's event system.\n * Only use this when React events can't reach the container (e.g. portals outside\n * the container's DOM tree). Prefer the default (false) for layered dismiss support.\n * Default: false\n */\n useDocumentListener?: boolean;\n /**\n * Whether to call e.preventDefault() on Escape.\n * Default: true\n */\n preventDefault?: boolean;\n /**\n * Whether to call e.stopPropagation() on Escape.\n * In React-event mode this is the layered-dismiss mechanism — set false only if\n * you want the event to continue bubbling to a parent dismiss handler.\n * Default: true\n */\n stopPropagation?: boolean;\n}\n\nexport interface UseDismissOnEscapeReturn {\n /**\n * Spread on the container element. In document-listener mode this is a no-op object.\n */\n onKeyDown: (e: React.KeyboardEvent) => void;\n}\n\n/**\n * Hook to handle Escape key dismissal.\n *\n * Default mode: returns an onKeyDown handler for the container element.\n * Uses React's synthetic events so child stopPropagation() is respected,\n * enabling layered dismiss (e.g. dropdown closes before sidebar).\n *\n * Document-listener mode (useDocumentListener: true): registers a native\n * capture listener on document. Use only when focus may be in a portal\n * outside the container's DOM tree.\n */\nexport function useDismissOnEscape<T extends HTMLElement = HTMLElement>({\n containerRef,\n onDismiss,\n enabled = true,\n useDocumentListener = false,\n preventDefault = true,\n stopPropagation = true,\n}: UseDismissOnEscapeOptions<T>): UseDismissOnEscapeReturn {\n // React-event mode: return handler to spread on container\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!enabled || !onDismiss || e.key !== 'Escape') return;\n preventDefault && e.preventDefault();\n stopPropagation && e.stopPropagation();\n onDismiss();\n },\n [enabled, onDismiss, preventDefault, stopPropagation]\n );\n\n // Document-listener mode: native capture handler\n useEffect(() => {\n if (!useDocumentListener || !enabled || !onDismiss) return;\n\n const container = containerRef?.current;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n // Only fire if focus is within the container (if provided)\n if (container && !container.contains(document.activeElement)) return;\n preventDefault && e.preventDefault();\n stopPropagation && e.stopPropagation();\n onDismiss();\n };\n\n document.addEventListener('keydown', handleEscape, { capture: true });\n return () => document.removeEventListener('keydown', handleEscape, { capture: true });\n }, [useDocumentListener, enabled, onDismiss, containerRef, preventDefault, stopPropagation]);\n\n return { onKeyDown: useDocumentListener ? (() => {}) : onKeyDown };\n}\n"],"names":["useCallback","useEffect","useDismissOnEscape","containerRef","onDismiss","enabled","useDocumentListener","preventDefault","stopPropagation","onKeyDown","e","key","container","current","handleEscape","contains","document","activeElement","addEventListener","capture","removeEventListener"],"mappings":"AAyDO,SAAA,eAAAA,GAAA,aAAAC,SAAA;AAAA,SAASC,EAAwD;AAAA,EACtEC,cAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,SAAAA,IAAU;AAAA,EACVC,qBAAAA,IAAsB;AAAA,EACtBC,gBAAAA,IAAiB;AAAA,EACjBC,iBAAAA,IAAkB;AACU,GAA6B;AAEzD,QAAMC,IAAYT,EAChB,CAACU,MAA2B;AAC1B,IAAI,CAACL,KAAW,CAACD,KAAaM,EAAEC,QAAQ,aACxCJ,KAAkBG,EAAEH,eAAAA,GACpBC,KAAmBE,EAAEF,gBAAAA,GACrBJ,EAAAA;AAAAA,EACF,GACA,CAACC,GAASD,GAAWG,GAAgBC,CAAe,CACtD;AAGAP,SAAAA,EAAU,MAAM;AACd,QAAI,CAACK,KAAuB,CAACD,KAAW,CAACD,EAAW;AAEpD,UAAMQ,IAAYT,GAAcU,SAE1BC,IAAeA,CAACJ,MAAqB;AACzC,MAAIA,EAAEC,QAAQ,aAEVC,KAAa,CAACA,EAAUG,SAASC,SAASC,aAAa,MAC3DV,KAAkBG,EAAEH,eAAAA,GACpBC,KAAmBE,EAAEF,gBAAAA,GACrBJ,EAAAA;AAAAA,IACF;AAEAY,oBAASE,iBAAiB,WAAWJ,GAAc;AAAA,MAAEK,SAAS;AAAA,IAAA,CAAM,GAC7D,MAAMH,SAASI,oBAAoB,WAAWN,GAAc;AAAA,MAAEK,SAAS;AAAA,IAAA,CAAM;AAAA,EACtF,GAAG,CAACb,GAAqBD,GAASD,GAAWD,GAAcI,GAAgBC,CAAe,CAAC,GAEpF;AAAA,IAAEC,WAAWH,IAAuB,MAAM;AAAA,IAAC,IAAKG;AAAAA,EAAAA;AACzD;"}
|