diff --git a/src/components/BootstrapBlazor.DriverJs/BootstrapBlazor.DriverJs.csproj b/src/components/BootstrapBlazor.DriverJs/BootstrapBlazor.DriverJs.csproj index 4cc62789..ad14cf46 100644 --- a/src/components/BootstrapBlazor.DriverJs/BootstrapBlazor.DriverJs.csproj +++ b/src/components/BootstrapBlazor.DriverJs/BootstrapBlazor.DriverJs.csproj @@ -1,7 +1,7 @@ - 10.0.1 + 10.0.2 diff --git a/src/components/BootstrapBlazor.DriverJs/Components/DriverJsConfig.cs b/src/components/BootstrapBlazor.DriverJs/Components/DriverJsConfig.cs index 7b4eed52..2999ff73 100644 --- a/src/components/BootstrapBlazor.DriverJs/Components/DriverJsConfig.cs +++ b/src/components/BootstrapBlazor.DriverJs/Components/DriverJsConfig.cs @@ -21,6 +21,12 @@ public class DriverJsConfig [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public bool? Animate { get; set; } + /// + /// Duration of the animation in milliseconds. (default: 400) + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public int? Duration { get; set; } + /// /// Overlay color. (default: black) /// @@ -39,6 +45,18 @@ public class DriverJsConfig [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public bool? AllowClose { get; set; } + /// + /// Whether to allow scrolling the page while the tour is active. (default: true) + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public bool? AllowScroll { get; set; } + + /// + /// Whether to skip the step when the target element is missing. (default: false) + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public bool? SkipMissingElement { get; set; } + /// /// Opacity of the backdrop. (default: 0.5) /// diff --git a/src/components/BootstrapBlazor.DriverJs/Components/DriverJsStep.cs b/src/components/BootstrapBlazor.DriverJs/Components/DriverJsStep.cs index 8d8a84ca..ac90d116 100644 --- a/src/components/BootstrapBlazor.DriverJs/Components/DriverJsStep.cs +++ b/src/components/BootstrapBlazor.DriverJs/Components/DriverJsStep.cs @@ -32,6 +32,13 @@ public class DriverJsStep : ComponentBase, IDisposable [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Description { get; set; } + /// + /// Whether to skip this step when the target element is missing. (default: false) + /// + [Parameter] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public bool? SkipMissingElement { get; set; } + /// /// 获得/设置 子组件内容 /// diff --git a/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.css b/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.css index 7ce0bd6b..afad5a2c 100644 --- a/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.css +++ b/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.css @@ -1 +1,2 @@ -.driver-active .driver-overlay,.driver-active *{pointer-events:none}.driver-active .driver-active-element,.driver-active .driver-active-element *,.driver-popover,.driver-popover *{pointer-events:auto}@keyframes animate-fade-in{0%{opacity:0}to{opacity:1}}.driver-fade .driver-overlay{animation:animate-fade-in .2s ease-in-out}.driver-fade .driver-popover{animation:animate-fade-in .2s}.driver-popover{all:unset;box-sizing:border-box;color:#2d2d2d;margin:0;padding:15px;border-radius:5px;min-width:250px;max-width:300px;box-shadow:0 1px 10px #0006;z-index:1000000000;position:fixed;top:0;right:0;background-color:#fff}.driver-popover *{font-family:Helvetica Neue,Inter,ui-sans-serif,"Apple Color Emoji",Helvetica,Arial,sans-serif}.driver-popover-title{font:19px/normal sans-serif;font-weight:700;display:block;position:relative;line-height:1.5;zoom:1;margin:0}.driver-popover-close-btn{all:unset;position:absolute;top:0;right:0;width:32px;height:28px;cursor:pointer;font-size:18px;font-weight:500;color:#d2d2d2;z-index:1;text-align:center;transition:color;transition-duration:.2s}.driver-popover-close-btn:hover,.driver-popover-close-btn:focus{color:#2d2d2d}.driver-popover-title[style*=block]+.driver-popover-description{margin-top:5px}.driver-popover-description{margin-bottom:0;font:14px/normal sans-serif;line-height:1.5;font-weight:400;zoom:1}.driver-popover-footer{margin-top:15px;text-align:right;zoom:1;display:flex;align-items:center;justify-content:space-between}.driver-popover-progress-text{font-size:13px;font-weight:400;color:#727272;zoom:1}.driver-popover-footer button{all:unset;display:inline-block;box-sizing:border-box;padding:3px 7px;text-decoration:none;text-shadow:1px 1px 0 #fff;background-color:#fff;color:#2d2d2d;font:12px/normal sans-serif;cursor:pointer;outline:0;zoom:1;line-height:1.3;border:1px solid #ccc;border-radius:3px}.driver-popover-footer .driver-popover-btn-disabled{opacity:.5;pointer-events:none}:not(body):has(>.driver-active-element){overflow:hidden!important}.driver-no-interaction,.driver-no-interaction *{pointer-events:none!important}.driver-popover-footer button:hover,.driver-popover-footer button:focus{background-color:#f7f7f7}.driver-popover-navigation-btns{display:flex;flex-grow:1;justify-content:flex-end}.driver-popover-navigation-btns button+button{margin-left:4px}.driver-popover-arrow{content:"";position:absolute;border:5px solid #fff}.driver-popover-arrow-side-over{display:none}.driver-popover-arrow-side-left{left:100%;border-right-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-right{right:100%;border-left-color:transparent;border-bottom-color:transparent;border-top-color:transparent}.driver-popover-arrow-side-top{top:100%;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}.driver-popover-arrow-side-bottom{bottom:100%;border-left-color:transparent;border-top-color:transparent;border-right-color:transparent}.driver-popover-arrow-side-center{display:none}.driver-popover-arrow-side-left.driver-popover-arrow-align-start,.driver-popover-arrow-side-right.driver-popover-arrow-align-start{top:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-start,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-start{left:15px}.driver-popover-arrow-align-end.driver-popover-arrow-side-left,.driver-popover-arrow-align-end.driver-popover-arrow-side-right{bottom:15px}.driver-popover-arrow-side-top.driver-popover-arrow-align-end,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-end{right:15px}.driver-popover-arrow-side-left.driver-popover-arrow-align-center,.driver-popover-arrow-side-right.driver-popover-arrow-align-center{top:50%;margin-top:-5px}.driver-popover-arrow-side-top.driver-popover-arrow-align-center,.driver-popover-arrow-side-bottom.driver-popover-arrow-align-center{left:50%;margin-left:-5px}.driver-popover-arrow-none{display:none} +.driver-active .driver-overlay{pointer-events:none}.driver-active.driver-no-scroll{overflow:hidden}.driver-active *{pointer-events:none}.driver-active .driver-active-element,.driver-active .driver-active-element *,.driver-popover,.driver-popover *{pointer-events:auto}@keyframes animate-fade-in{0%{opacity:0}to{opacity:1}}.driver-fade .driver-overlay{animation:animate-fade-in var(--driver-animation-duration,.4s) ease-in-out}.driver-fade .driver-popover{animation:animate-fade-in var(--driver-animation-duration,.4s)}.driver-popover{all:unset;font-family:var(--driver-popover-font-family,"Helvetica Neue", Inter, ui-sans-serif, "Apple Color Emoji", Helvetica, Arial, sans-serif);box-sizing:border-box;color:#2d2d2d;z-index:1000000000;background-color:#fff;border-radius:5px;min-width:250px;max-width:300px;margin:0;padding:15px;position:fixed;top:0;right:0;box-shadow:0 1px 10px #0006}.driver-popover-title{zoom:1;margin:0;font-size:19px;font-weight:700;line-height:1.5;display:block;position:relative}.driver-popover-close-btn{all:unset;cursor:pointer;color:#d2d2d2;z-index:1;text-align:center;width:32px;height:28px;font-size:18px;font-weight:500;transition:color .2s;position:absolute;top:0;right:0}.driver-popover-close-btn:hover,.driver-popover-close-btn:focus{color:#2d2d2d}.driver-popover-title[style*=block]+.driver-popover-description{margin-top:5px}.driver-popover-description{zoom:1;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.5}.driver-popover-footer{text-align:right;zoom:1;justify-content:space-between;align-items:center;margin-top:15px;display:flex}.driver-popover-progress-text{color:#727272;zoom:1;font-size:13px;font-weight:400}.driver-popover-footer-btn{all:unset;box-sizing:border-box;color:#2d2d2d;cursor:pointer;zoom:1;background-color:#fff;border:1px solid #ccc;border-radius:3px;outline:0;padding:3px 7px;font-size:12px;line-height:1.3;text-decoration:none;display:inline-block}.driver-popover-footer .driver-popover-btn-disabled{opacity:.5;pointer-events:none}.driver-active-element-parent-no-scroll{overflow:hidden!important}.driver-no-interaction,.driver-no-interaction *{pointer-events:none!important}.driver-popover-footer-btn:hover,.driver-popover-footer-btn:focus{background-color:#f7f7f7}.driver-popover-navigation-btns{flex-grow:1;justify-content:flex-end;display:flex}.driver-popover-navigation-btns button+button{margin-left:4px}.driver-popover-arrow{content:"";border:5px solid #fff;position:absolute}.driver-popover-arrow-side-over{display:none}.driver-popover-arrow-side-left{border-top-color:#0000;border-bottom-color:#0000;border-right-color:#0000;left:100%}.driver-popover-arrow-side-right{border-top-color:#0000;border-bottom-color:#0000;border-left-color:#0000;right:100%}.driver-popover-arrow-side-top{border-bottom-color:#0000;border-left-color:#0000;border-right-color:#0000;top:100%}.driver-popover-arrow-side-bottom{border-top-color:#0000;border-left-color:#0000;border-right-color:#0000;bottom:100%}.driver-popover-arrow-side-center,.driver-popover-arrow-none{display:none} +/*$vite$:1*/ \ No newline at end of file diff --git a/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.js.mjs b/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.js.mjs index 25cd54d1..d8f5e21e 100644 --- a/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.js.mjs +++ b/src/components/BootstrapBlazor.DriverJs/wwwroot/driver.js.mjs @@ -1,675 +1 @@ -let z = {}, J; -function F(e = {}) { - z = { - animate: !0, - allowClose: !0, - overlayClickBehavior: "close", - overlayOpacity: 0.7, - smoothScroll: !1, - disableActiveInteraction: !1, - showProgress: !1, - stagePadding: 10, - stageRadius: 5, - popoverOffset: 10, - showButtons: ["next", "previous", "close"], - disableButtons: [], - overlayColor: "#000", - ...e - }; -} -function s(e) { - return e ? z[e] : z; -} -function le(e) { - J = e; -} -function _() { - return J; -} -let I = {}; -function N(e, o) { - I[e] = o; -} -function L(e) { - var o; - (o = I[e]) == null || o.call(I); -} -function de() { - I = {}; -} -function O(e, o, t, i) { - return (e /= i / 2) < 1 ? t / 2 * e * e + o : -t / 2 * (--e * (e - 2) - 1) + o; -} -function U(e) { - const o = 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'; - return e.flatMap((t) => { - const i = t.matches(o), d = Array.from(t.querySelectorAll(o)); - return [...i ? [t] : [], ...d]; - }).filter((t) => getComputedStyle(t).pointerEvents !== "none" && ve(t)); -} -function ee(e) { - if (!e || ue(e)) - return; - const o = s("smoothScroll"), t = e.offsetHeight > window.innerHeight; - e.scrollIntoView({ - // Removing the smooth scrolling for elements which exist inside the scrollable parent - // This was causing the highlight to not properly render - behavior: !o || pe(e) ? "auto" : "smooth", - inline: "center", - block: t ? "start" : "center" - }); -} -function pe(e) { - if (!e || !e.parentElement) - return; - const o = e.parentElement; - return o.scrollHeight > o.clientHeight; -} -function ue(e) { - const o = e.getBoundingClientRect(); - return o.top >= 0 && o.left >= 0 && o.bottom <= (window.innerHeight || document.documentElement.clientHeight) && o.right <= (window.innerWidth || document.documentElement.clientWidth); -} -function ve(e) { - return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length); -} -let D = {}; -function k(e, o) { - D[e] = o; -} -function l(e) { - return e ? D[e] : D; -} -function X() { - D = {}; -} -function fe(e, o, t, i) { - let d = l("__activeStagePosition"); - const n = d || t.getBoundingClientRect(), f = i.getBoundingClientRect(), w = O(e, n.x, f.x - n.x, o), r = O(e, n.y, f.y - n.y, o), v = O(e, n.width, f.width - n.width, o), g = O(e, n.height, f.height - n.height, o); - d = { - x: w, - y: r, - width: v, - height: g - }, oe(d), k("__activeStagePosition", d); -} -function te(e) { - if (!e) - return; - const o = e.getBoundingClientRect(), t = { - x: o.x, - y: o.y, - width: o.width, - height: o.height - }; - k("__activeStagePosition", t), oe(t); -} -function he() { - const e = l("__activeStagePosition"), o = l("__overlaySvg"); - if (!e) - return; - if (!o) { - console.warn("No stage svg found."); - return; - } - const t = window.innerWidth, i = window.innerHeight; - o.setAttribute("viewBox", `0 0 ${t} ${i}`); -} -function ge(e) { - const o = we(e); - document.body.appendChild(o), re(o, (t) => { - t.target.tagName === "path" && L("overlayClick"); - }), k("__overlaySvg", o); -} -function oe(e) { - const o = l("__overlaySvg"); - if (!o) { - ge(e); - return; - } - const t = o.firstElementChild; - if ((t == null ? void 0 : t.tagName) !== "path") - throw new Error("no path element found in stage svg"); - t.setAttribute("d", ie(e)); -} -function we(e) { - const o = window.innerWidth, t = window.innerHeight, i = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - i.classList.add("driver-overlay", "driver-overlay-animated"), i.setAttribute("viewBox", `0 0 ${o} ${t}`), i.setAttribute("xmlSpace", "preserve"), i.setAttribute("xmlnsXlink", "http://www.w3.org/1999/xlink"), i.setAttribute("version", "1.1"), i.setAttribute("preserveAspectRatio", "xMinYMin slice"), i.style.fillRule = "evenodd", i.style.clipRule = "evenodd", i.style.strokeLinejoin = "round", i.style.strokeMiterlimit = "2", i.style.zIndex = "10000", i.style.position = "fixed", i.style.top = "0", i.style.left = "0", i.style.width = "100%", i.style.height = "100%"; - const d = document.createElementNS("http://www.w3.org/2000/svg", "path"); - return d.setAttribute("d", ie(e)), d.style.fill = s("overlayColor") || "rgb(0,0,0)", d.style.opacity = `${s("overlayOpacity")}`, d.style.pointerEvents = "auto", d.style.cursor = "auto", i.appendChild(d), i; -} -function ie(e) { - const o = window.innerWidth, t = window.innerHeight, i = s("stagePadding") || 0, d = s("stageRadius") || 0, n = e.width + i * 2, f = e.height + i * 2, w = Math.min(d, n / 2, f / 2), r = Math.floor(Math.max(w, 0)), v = e.x - i + r, g = e.y - i, y = n - r * 2, a = f - r * 2; - return `M${o},0L0,0L0,${t}L${o},${t}L${o},0Z - M${v},${g} h${y} a${r},${r} 0 0 1 ${r},${r} v${a} a${r},${r} 0 0 1 -${r},${r} h-${y} a${r},${r} 0 0 1 -${r},-${r} v-${a} a${r},${r} 0 0 1 ${r},-${r} z`; -} -function me() { - const e = l("__overlaySvg"); - e && e.remove(); -} -function ye() { - const e = document.getElementById("driver-dummy-element"); - if (e) - return e; - let o = document.createElement("div"); - return o.id = "driver-dummy-element", o.style.width = "0", o.style.height = "0", o.style.pointerEvents = "none", o.style.opacity = "0", o.style.position = "fixed", o.style.top = "50%", o.style.left = "50%", document.body.appendChild(o), o; -} -function j(e) { - const { element: o } = e; - let t = typeof o == "function" ? o() : typeof o == "string" ? document.querySelector(o) : o; - t || (t = ye()), be(t, e); -} -function xe() { - const e = l("__activeElement"), o = l("__activeStep"); - e && (te(e), he(), ae(e, o)); -} -function be(e, o) { - var C; - const i = Date.now(), d = l("__activeStep"), n = l("__activeElement") || e, f = !n || n === e, w = e.id === "driver-dummy-element", r = n.id === "driver-dummy-element", v = s("animate"), g = o.onHighlightStarted || s("onHighlightStarted"), y = (o == null ? void 0 : o.onHighlighted) || s("onHighlighted"), a = (d == null ? void 0 : d.onDeselected) || s("onDeselected"), p = s(), c = l(); - !f && a && a(r ? void 0 : n, d, { - config: p, - state: c, - driver: _() - }), g && g(w ? void 0 : e, o, { - config: p, - state: c, - driver: _() - }); - const u = !f && v; - let h = !1; - Se(), k("previousStep", d), k("previousElement", n), k("activeStep", o), k("activeElement", e); - const m = () => { - if (l("__transitionCallback") !== m) - return; - const b = Date.now() - i, E = 400 - b <= 400 / 2; - o.popover && E && !h && u && (Q(e, o), h = !0), s("animate") && b < 400 ? fe(b, 400, n, e) : (te(e), y && y(w ? void 0 : e, o, { - config: s(), - state: l(), - driver: _() - }), k("__transitionCallback", void 0), k("__previousStep", d), k("__previousElement", n), k("__activeStep", o), k("__activeElement", e)), window.requestAnimationFrame(m); - }; - k("__transitionCallback", m), window.requestAnimationFrame(m), ee(e), !u && o.popover && Q(e, o), n.classList.remove("driver-active-element", "driver-no-interaction"), n.removeAttribute("aria-haspopup"), n.removeAttribute("aria-expanded"), n.removeAttribute("aria-controls"), ((C = o.disableActiveInteraction) != null ? C : s("disableActiveInteraction")) && e.classList.add("driver-no-interaction"), e.classList.add("driver-active-element"), e.setAttribute("aria-haspopup", "dialog"), e.setAttribute("aria-expanded", "true"), e.setAttribute("aria-controls", "driver-popover-content"); -} -function Ce() { - var e; - (e = document.getElementById("driver-dummy-element")) == null || e.remove(), document.querySelectorAll(".driver-active-element").forEach((o) => { - o.classList.remove("driver-active-element", "driver-no-interaction"), o.removeAttribute("aria-haspopup"), o.removeAttribute("aria-expanded"), o.removeAttribute("aria-controls"); - }); -} -function M() { - const e = l("__resizeTimeout"); - e && window.cancelAnimationFrame(e), k("__resizeTimeout", window.requestAnimationFrame(xe)); -} -function Pe(e) { - var r; - if (!l("isInitialized") || !(e.key === "Tab" || e.keyCode === 9)) - return; - const i = l("__activeElement"), d = (r = l("popover")) == null ? void 0 : r.wrapper, n = U([ - ...d ? [d] : [], - ...i ? [i] : [] - ]), f = n[0], w = n[n.length - 1]; - if (e.preventDefault(), e.shiftKey) { - const v = n[n.indexOf(document.activeElement) - 1] || w; - v == null || v.focus(); - } else { - const v = n[n.indexOf(document.activeElement) + 1] || f; - v == null || v.focus(); - } -} -function ne(e) { - var t; - ((t = s("allowKeyboardControl")) == null || t) && (e.key === "Escape" ? L("escapePress") : e.key === "ArrowRight" ? L("arrowRightPress") : e.key === "ArrowLeft" && L("arrowLeftPress")); -} -function re(e, o, t) { - const i = (n, f) => { - const w = n.target; - e.contains(w) && ((!t || t(w)) && (n.preventDefault(), n.stopPropagation(), n.stopImmediatePropagation()), f == null || f(n)); - }; - document.addEventListener("pointerdown", i, !0), document.addEventListener("mousedown", i, !0), document.addEventListener("pointerup", i, !0), document.addEventListener("mouseup", i, !0), document.addEventListener( - "click", - (n) => { - i(n, o); - }, - !0 - ); -} -function ke() { - window.addEventListener("keyup", ne, !1), window.addEventListener("keydown", Pe, !1), window.addEventListener("resize", M), window.addEventListener("scroll", M); -} -function _e() { - window.removeEventListener("keyup", ne), window.removeEventListener("resize", M), window.removeEventListener("scroll", M); -} -function Se() { - const e = l("popover"); - e && (e.wrapper.style.display = "none"); -} -function Q(e, o) { - var b, P; - let t = l("popover"); - t && document.body.removeChild(t.wrapper), t = Le(), document.body.appendChild(t.wrapper); - const { - title: i, - description: d, - showButtons: n, - disableButtons: f, - showProgress: w, - nextBtnText: r = s("nextBtnText") || "Next →", - prevBtnText: v = s("prevBtnText") || "← Previous", - progressText: g = s("progressText") || "{current} of {total}" - } = o.popover || {}; - t.nextButton.innerHTML = r, t.previousButton.innerHTML = v, t.progress.innerHTML = g, i ? (t.title.innerHTML = i, t.title.style.display = "block") : t.title.style.display = "none", d ? (t.description.innerHTML = d, t.description.style.display = "block") : t.description.style.display = "none"; - const y = n || s("showButtons"), a = w || s("showProgress") || !1, p = (y == null ? void 0 : y.includes("next")) || (y == null ? void 0 : y.includes("previous")) || a; - t.closeButton.style.display = y.includes("close") ? "block" : "none", p ? (t.footer.style.display = "flex", t.progress.style.display = a ? "block" : "none", t.nextButton.style.display = y.includes("next") ? "block" : "none", t.previousButton.style.display = y.includes("previous") ? "block" : "none") : t.footer.style.display = "none"; - const c = f || s("disableButtons") || []; - c != null && c.includes("next") && (t.nextButton.disabled = !0, t.nextButton.classList.add("driver-popover-btn-disabled")), c != null && c.includes("previous") && (t.previousButton.disabled = !0, t.previousButton.classList.add("driver-popover-btn-disabled")), c != null && c.includes("close") && (t.closeButton.disabled = !0, t.closeButton.classList.add("driver-popover-btn-disabled")); - const u = t.wrapper; - u.style.display = "block", u.style.left = "", u.style.top = "", u.style.bottom = "", u.style.right = "", u.id = "driver-popover-content", u.setAttribute("role", "dialog"), u.setAttribute("aria-labelledby", "driver-popover-title"), u.setAttribute("aria-describedby", "driver-popover-description"); - const h = t.arrow; - h.className = "driver-popover-arrow"; - const m = ((b = o.popover) == null ? void 0 : b.popoverClass) || s("popoverClass") || ""; - u.className = `driver-popover ${m}`.trim(), re( - t.wrapper, - (E) => { - var B, R, W; - const T = E.target, A = ((B = o.popover) == null ? void 0 : B.onNextClick) || s("onNextClick"), H = ((R = o.popover) == null ? void 0 : R.onPrevClick) || s("onPrevClick"), $ = ((W = o.popover) == null ? void 0 : W.onCloseClick) || s("onCloseClick"); - if (T.closest(".driver-popover-next-btn")) - return A ? A(e, o, { - config: s(), - state: l(), - driver: _() - }) : L("nextClick"); - if (T.closest(".driver-popover-prev-btn")) - return H ? H(e, o, { - config: s(), - state: l(), - driver: _() - }) : L("prevClick"); - if (T.closest(".driver-popover-close-btn")) - return $ ? $(e, o, { - config: s(), - state: l(), - driver: _() - }) : L("closeClick"); - }, - (E) => !(t != null && t.description.contains(E)) && !(t != null && t.title.contains(E)) && typeof E.className == "string" && E.className.includes("driver-popover") - ), k("popover", t); - const x = ((P = o.popover) == null ? void 0 : P.onPopoverRender) || s("onPopoverRender"); - x && x(t, { - config: s(), - state: l(), - driver: _() - }), ae(e, o), ee(u); - const C = e.classList.contains("driver-dummy-element"), S = U([u, ...C ? [] : [e]]); - S.length > 0 && S[0].focus(); -} -function se() { - const e = l("popover"); - if (!(e != null && e.wrapper)) - return; - const o = e.wrapper.getBoundingClientRect(), t = s("stagePadding") || 0, i = s("popoverOffset") || 0; - return { - width: o.width + t + i, - height: o.height + t + i, - realWidth: o.width, - realHeight: o.height - }; -} -function Z(e, o) { - const { elementDimensions: t, popoverDimensions: i, popoverPadding: d, popoverArrowDimensions: n } = o; - return e === "start" ? Math.max( - Math.min( - t.top - d, - window.innerHeight - i.realHeight - n.width - ), - n.width - ) : e === "end" ? Math.max( - Math.min( - t.top - (i == null ? void 0 : i.realHeight) + t.height + d, - window.innerHeight - (i == null ? void 0 : i.realHeight) - n.width - ), - n.width - ) : e === "center" ? Math.max( - Math.min( - t.top + t.height / 2 - (i == null ? void 0 : i.realHeight) / 2, - window.innerHeight - (i == null ? void 0 : i.realHeight) - n.width - ), - n.width - ) : 0; -} -function G(e, o) { - const { elementDimensions: t, popoverDimensions: i, popoverPadding: d, popoverArrowDimensions: n } = o; - return e === "start" ? Math.max( - Math.min( - t.left - d, - window.innerWidth - i.realWidth - n.width - ), - n.width - ) : e === "end" ? Math.max( - Math.min( - t.left - (i == null ? void 0 : i.realWidth) + t.width + d, - window.innerWidth - (i == null ? void 0 : i.realWidth) - n.width - ), - n.width - ) : e === "center" ? Math.max( - Math.min( - t.left + t.width / 2 - (i == null ? void 0 : i.realWidth) / 2, - window.innerWidth - (i == null ? void 0 : i.realWidth) - n.width - ), - n.width - ) : 0; -} -function ae(e, o) { - const t = l("popover"); - if (!t) - return; - const { align: i = "start", side: d = "left" } = (o == null ? void 0 : o.popover) || {}, n = i, f = e.id === "driver-dummy-element" ? "over" : d, w = s("stagePadding") || 0, r = se(), v = t.arrow.getBoundingClientRect(), g = e.getBoundingClientRect(), y = g.top - r.height; - let a = y >= 0; - const p = window.innerHeight - (g.bottom + r.height); - let c = p >= 0; - const u = g.left - r.width; - let h = u >= 0; - const m = window.innerWidth - (g.right + r.width); - let x = m >= 0; - const C = !a && !c && !h && !x; - let S = f; - if (f === "top" && a ? x = h = c = !1 : f === "bottom" && c ? x = h = a = !1 : f === "left" && h ? x = a = c = !1 : f === "right" && x && (h = a = c = !1), f === "over") { - const b = window.innerWidth / 2 - r.realWidth / 2, P = window.innerHeight / 2 - r.realHeight / 2; - t.wrapper.style.left = `${b}px`, t.wrapper.style.right = "auto", t.wrapper.style.top = `${P}px`, t.wrapper.style.bottom = "auto"; - } else if (C) { - const b = window.innerWidth / 2 - (r == null ? void 0 : r.realWidth) / 2, P = 10; - t.wrapper.style.left = `${b}px`, t.wrapper.style.right = "auto", t.wrapper.style.bottom = `${P}px`, t.wrapper.style.top = "auto"; - } else if (h) { - const b = Math.min( - u, - window.innerWidth - (r == null ? void 0 : r.realWidth) - v.width - ), P = Z(n, { - elementDimensions: g, - popoverDimensions: r, - popoverPadding: w, - popoverArrowDimensions: v - }); - t.wrapper.style.left = `${b}px`, t.wrapper.style.top = `${P}px`, t.wrapper.style.bottom = "auto", t.wrapper.style.right = "auto", S = "left"; - } else if (x) { - const b = Math.min( - m, - window.innerWidth - (r == null ? void 0 : r.realWidth) - v.width - ), P = Z(n, { - elementDimensions: g, - popoverDimensions: r, - popoverPadding: w, - popoverArrowDimensions: v - }); - t.wrapper.style.right = `${b}px`, t.wrapper.style.top = `${P}px`, t.wrapper.style.bottom = "auto", t.wrapper.style.left = "auto", S = "right"; - } else if (a) { - const b = Math.min( - y, - window.innerHeight - r.realHeight - v.width - ); - let P = G(n, { - elementDimensions: g, - popoverDimensions: r, - popoverPadding: w, - popoverArrowDimensions: v - }); - t.wrapper.style.top = `${b}px`, t.wrapper.style.left = `${P}px`, t.wrapper.style.bottom = "auto", t.wrapper.style.right = "auto", S = "top"; - } else if (c) { - const b = Math.min( - p, - window.innerHeight - (r == null ? void 0 : r.realHeight) - v.width - ); - let P = G(n, { - elementDimensions: g, - popoverDimensions: r, - popoverPadding: w, - popoverArrowDimensions: v - }); - t.wrapper.style.left = `${P}px`, t.wrapper.style.bottom = `${b}px`, t.wrapper.style.top = "auto", t.wrapper.style.right = "auto", S = "bottom"; - } - C ? t.arrow.classList.add("driver-popover-arrow-none") : Ee(n, S, e); -} -function Ee(e, o, t) { - const i = l("popover"); - if (!i) - return; - const d = t.getBoundingClientRect(), n = se(), f = i.arrow, w = n.width, r = window.innerWidth, v = d.width, g = d.left, y = n.height, a = window.innerHeight, p = d.top, c = d.height; - f.className = "driver-popover-arrow"; - let u = o, h = e; - if (o === "top" ? (g + v <= 0 ? (u = "right", h = "end") : g + v - w <= 0 && (u = "top", h = "start"), g >= r ? (u = "left", h = "end") : g + w >= r && (u = "top", h = "end")) : o === "bottom" ? (g + v <= 0 ? (u = "right", h = "start") : g + v - w <= 0 && (u = "bottom", h = "start"), g >= r ? (u = "left", h = "start") : g + w >= r && (u = "bottom", h = "end")) : o === "left" ? (p + c <= 0 ? (u = "bottom", h = "end") : p + c - y <= 0 && (u = "left", h = "start"), p >= a ? (u = "top", h = "end") : p + y >= a && (u = "left", h = "end")) : o === "right" && (p + c <= 0 ? (u = "bottom", h = "start") : p + c - y <= 0 && (u = "right", h = "start"), p >= a ? (u = "top", h = "start") : p + y >= a && (u = "right", h = "end")), !u) - f.classList.add("driver-popover-arrow-none"); - else { - f.classList.add(`driver-popover-arrow-side-${u}`), f.classList.add(`driver-popover-arrow-align-${h}`); - const m = t.getBoundingClientRect(), x = f.getBoundingClientRect(), C = s("stagePadding") || 0, S = m.left - C < window.innerWidth && m.right + C > 0 && m.top - C < window.innerHeight && m.bottom + C > 0; - o === "bottom" && S && (x.x > m.x && x.x + x.width < m.x + m.width ? i.wrapper.style.transform = "translateY(0)" : (f.classList.remove(`driver-popover-arrow-align-${h}`), f.classList.add("driver-popover-arrow-none"), i.wrapper.style.transform = `translateY(-${C / 2}px)`)); - } -} -function Le() { - const e = document.createElement("div"); - e.classList.add("driver-popover"); - const o = document.createElement("div"); - o.classList.add("driver-popover-arrow"); - const t = document.createElement("header"); - t.id = "driver-popover-title", t.classList.add("driver-popover-title"), t.style.display = "none", t.innerText = "Popover Title"; - const i = document.createElement("div"); - i.id = "driver-popover-description", i.classList.add("driver-popover-description"), i.style.display = "none", i.innerText = "Popover description is here"; - const d = document.createElement("button"); - d.type = "button", d.classList.add("driver-popover-close-btn"), d.setAttribute("aria-label", "Close"), d.innerHTML = "×"; - const n = document.createElement("footer"); - n.classList.add("driver-popover-footer"); - const f = document.createElement("span"); - f.classList.add("driver-popover-progress-text"), f.innerText = ""; - const w = document.createElement("span"); - w.classList.add("driver-popover-navigation-btns"); - const r = document.createElement("button"); - r.type = "button", r.classList.add("driver-popover-prev-btn"), r.innerHTML = "← Previous"; - const v = document.createElement("button"); - return v.type = "button", v.classList.add("driver-popover-next-btn"), v.innerHTML = "Next →", w.appendChild(r), w.appendChild(v), n.appendChild(f), n.appendChild(w), e.appendChild(d), e.appendChild(o), e.appendChild(t), e.appendChild(i), e.appendChild(n), { - wrapper: e, - arrow: o, - title: t, - description: i, - footer: n, - previousButton: r, - nextButton: v, - closeButton: d, - footerButtons: w, - progress: f - }; -} -function Te() { - var o; - const e = l("popover"); - e && ((o = e.wrapper.parentElement) == null || o.removeChild(e.wrapper)); -} -function Ae(e = {}) { - F(e); - function o() { - s("allowClose") && g(); - } - function t() { - const a = s("overlayClickBehavior"); - if (s("allowClose") && a === "close") { - g(); - return; - } - if (typeof a == "function") { - const p = l("__activeStep"), c = l("__activeElement"); - a(c, p, { - config: s(), - state: l(), - driver: _() - }); - return; - } - a === "nextStep" && i(); - } - function i() { - const a = l("activeIndex"), p = s("steps") || []; - if (typeof a == "undefined") - return; - const c = a + 1; - p[c] ? v(c) : g(); - } - function d() { - const a = l("activeIndex"), p = s("steps") || []; - if (typeof a == "undefined") - return; - const c = a - 1; - p[c] ? v(c) : g(); - } - function n(a) { - (s("steps") || [])[a] ? v(a) : g(); - } - function f() { - var x; - if (l("__transitionCallback")) - return; - const p = l("activeIndex"), c = l("__activeStep"), u = l("__activeElement"); - if (typeof p == "undefined" || typeof c == "undefined" || typeof l("activeIndex") == "undefined") - return; - const m = ((x = c.popover) == null ? void 0 : x.onPrevClick) || s("onPrevClick"); - if (m) - return m(u, c, { - config: s(), - state: l(), - driver: _() - }); - d(); - } - function w() { - var m; - if (l("__transitionCallback")) - return; - const p = l("activeIndex"), c = l("__activeStep"), u = l("__activeElement"); - if (typeof p == "undefined" || typeof c == "undefined") - return; - const h = ((m = c.popover) == null ? void 0 : m.onNextClick) || s("onNextClick"); - if (h) - return h(u, c, { - config: s(), - state: l(), - driver: _() - }); - i(); - } - function r() { - l("isInitialized") || (k("isInitialized", !0), document.body.classList.add("driver-active", s("animate") ? "driver-fade" : "driver-simple"), ke(), N("overlayClick", t), N("escapePress", o), N("arrowLeftPress", f), N("arrowRightPress", w)); - } - function v(a = 0) { - var $, B, R, W, V, q, K, Y; - const p = s("steps"); - if (!p) { - console.error("No steps to drive through"), g(); - return; - } - if (!p[a]) { - g(); - return; - } - k("__activeOnDestroyed", document.activeElement), k("activeIndex", a); - const c = p[a], u = p[a + 1], h = p[a - 1], m = (($ = c.popover) == null ? void 0 : $.doneBtnText) || s("doneBtnText") || "Done", x = s("allowClose"), C = typeof ((B = c.popover) == null ? void 0 : B.showProgress) != "undefined" ? (R = c.popover) == null ? void 0 : R.showProgress : s("showProgress"), b = (((W = c.popover) == null ? void 0 : W.progressText) || s("progressText") || "{{current}} of {{total}}").replace("{{current}}", `${a + 1}`).replace("{{total}}", `${p.length}`), P = ((V = c.popover) == null ? void 0 : V.showButtons) || s("showButtons"), E = [ - "next", - "previous", - ...x ? ["close"] : [] - ].filter((ce) => !(P != null && P.length) || P.includes(ce)), T = ((q = c.popover) == null ? void 0 : q.onNextClick) || s("onNextClick"), A = ((K = c.popover) == null ? void 0 : K.onPrevClick) || s("onPrevClick"), H = ((Y = c.popover) == null ? void 0 : Y.onCloseClick) || s("onCloseClick"); - j({ - ...c, - popover: { - showButtons: E, - nextBtnText: u ? void 0 : m, - disableButtons: [...h ? [] : ["previous"]], - showProgress: C, - progressText: b, - onNextClick: T || (() => { - u ? v(a + 1) : g(); - }), - onPrevClick: A || (() => { - v(a - 1); - }), - onCloseClick: H || (() => { - g(); - }), - ...(c == null ? void 0 : c.popover) || {} - } - }); - } - function g(a = !0) { - const p = l("__activeElement"), c = l("__activeStep"), u = l("__activeOnDestroyed"), h = s("onDestroyStarted"); - if (a && h) { - const C = !p || (p == null ? void 0 : p.id) === "driver-dummy-element"; - h(C ? void 0 : p, c, { - config: s(), - state: l(), - driver: _() - }); - return; - } - const m = (c == null ? void 0 : c.onDeselected) || s("onDeselected"), x = s("onDestroyed"); - if (document.body.classList.remove("driver-active", "driver-fade", "driver-simple"), _e(), Te(), Ce(), me(), de(), X(), p && c) { - const C = p.id === "driver-dummy-element"; - m && m(C ? void 0 : p, c, { - config: s(), - state: l(), - driver: _() - }), x && x(C ? void 0 : p, c, { - config: s(), - state: l(), - driver: _() - }); - } - u && u.focus(); - } - const y = { - isActive: () => l("isInitialized") || !1, - refresh: M, - drive: (a = 0) => { - r(), v(a); - }, - setConfig: F, - setSteps: (a) => { - X(), F({ - ...s(), - steps: a - }); - }, - getConfig: s, - getState: l, - getActiveIndex: () => l("activeIndex"), - isFirstStep: () => l("activeIndex") === 0, - isLastStep: () => { - const a = s("steps") || [], p = l("activeIndex"); - return p !== void 0 && p === a.length - 1; - }, - getActiveStep: () => l("activeStep"), - getActiveElement: () => l("activeElement"), - getPreviousElement: () => l("previousElement"), - getPreviousStep: () => l("previousStep"), - moveNext: i, - movePrevious: d, - moveTo: n, - hasNextStep: () => { - const a = s("steps") || [], p = l("activeIndex"); - return p !== void 0 && !!a[p + 1]; - }, - hasPreviousStep: () => { - const a = s("steps") || [], p = l("activeIndex"); - return p !== void 0 && !!a[p - 1]; - }, - highlight: (a) => { - r(), j({ - ...a, - popover: a.popover ? { - showButtons: [], - showProgress: !1, - progressText: "", - ...a.popover - } : void 0 - }); - }, - destroy: () => { - g(!1); - } - }; - return le(y), y; -} -export { - Ae as driver -}; +function e(e){return"function"==typeof e?e():"string"==typeof e?document.querySelector(e):e}function t(e,t,o,i){return(e/=i/2)<1?o/2*e*e+t:-o/2*(--e*(e-2)-1)+t}function o(e){let t='a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])';return e.flatMap(e=>{let o=e.matches(t),i=Array.from(e.querySelectorAll(t));return[...o?[e]:[],...i]}).filter(e=>"none"!==getComputedStyle(e).pointerEvents&&function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)}(e))}function i(e,t){if(!t||function(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}(t))return;let o=e.getConfig("smoothScroll"),i=t.offsetHeight>window.innerHeight;t.scrollIntoView({behavior:!o||n(t)?"auto":"smooth",inline:"center",block:i?"start":"center"})}function n(e){if(!e||!e.parentElement)return;let t=e.parentElement;return t.scrollHeight>t.clientHeight}function r(e,o,i,n,r){let s=e.getState("__activeStagePosition"),l=s||n.getBoundingClientRect(),d=r.getBoundingClientRect();s={x:t(o,l.x,d.x-l.x,i),y:t(o,l.y,d.y-l.y,i),width:t(o,l.width,d.width-l.width,i),height:t(o,l.height,d.height-l.height,i)},a(e,s),e.setState("__activeStagePosition",s)}function s(e,t){if(!t)return;let o=t.getBoundingClientRect(),i={x:o.x,y:o.y,width:o.width,height:o.height};e.setState("__activeStagePosition",i),a(e,i)}function l(e,t){let o=function(e,t){let o=window.innerWidth,i=window.innerHeight,n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.classList.add("driver-overlay","driver-overlay-animated"),n.setAttribute("viewBox",`0 0 ${o} ${i}`),n.setAttribute("xmlSpace","preserve"),n.setAttribute("xmlnsXlink","http://www.w3.org/1999/xlink"),n.setAttribute("version","1.1"),n.setAttribute("preserveAspectRatio","xMinYMin slice"),n.style.fillRule="evenodd",n.style.clipRule="evenodd",n.style.strokeLinejoin="round",n.style.strokeMiterlimit="2",n.style.zIndex="10000",n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.width="100%",n.style.height="100%";let r=document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d",d(e,t)),r.style.fill=e.getConfig("overlayColor")||"rgb(0,0,0)",r.style.opacity=`${e.getConfig("overlayOpacity")}`,r.style.pointerEvents="auto",r.style.cursor="auto",n.appendChild(r),n}(e,t);document.body.appendChild(o),_(o,t=>{"path"===t.target.tagName&&e.emit("overlayClick")}),e.setState("__overlaySvg",o)}function a(e,t){let o=e.getState("__overlaySvg");if(!o)return void l(e,t);let i=o.firstElementChild;if("path"!==i?.tagName)throw Error("no path element found in stage svg");i.setAttribute("d",d(e,t))}function d(e,t){let o=window.innerWidth,i=window.innerHeight,n=e.getConfig("stagePadding")||0,r=e.getConfig("stageRadius")||0,s=t.width+2*n,l=t.height+2*n,a=Math.min(r,s/2,l/2),d=Math.floor(Math.max(a,0)),p=s-2*d,g=l-2*d;return`M${o},0L0,0L0,${i}L${o},${i}L${o},0Z\n M${t.x-n+d},${t.y-n} h${p} a${d},${d} 0 0 1 ${d},${d} v${g} a${d},${d} 0 0 1 -${d},${d} h-${p} a${d},${d} 0 0 1 -${d},-${d} v-${g} a${d},${d} 0 0 1 ${d},-${d} z`}function p(e,t){let{elementDimensions:o,popoverDimensions:i,popoverPadding:n,popoverArrowDimensions:r}=t;return"start"===e?Math.max(Math.min(o.top-n,window.innerHeight-i.realHeight-r.width),r.width):"end"===e?Math.max(Math.min(o.top-i?.realHeight+o.height+n,window.innerHeight-i?.realHeight-r.width),r.width):"center"===e?Math.max(Math.min(o.top+o.height/2-i?.realHeight/2,window.innerHeight-i?.realHeight-r.width),r.width):0}function g(e,t){let{elementDimensions:o,popoverDimensions:i,popoverPadding:n,popoverArrowDimensions:r}=t;return"start"===e?Math.max(Math.min(o.left-n,window.innerWidth-i.realWidth-r.width),r.width):"end"===e?Math.max(Math.min(o.left-i?.realWidth+o.width+n,window.innerWidth-i?.realWidth-r.width),r.width):"center"===e?Math.max(Math.min(o.left+o.width/2-i?.realWidth/2,window.innerWidth-i?.realWidth-r.width),r.width):0}function v(e,t,o){let i=e.getState("popover");if(!i)return;let{align:n="start",side:r="bottom"}=o?.popover||{},s=n,l="driver-dummy-element"===t.id?"over":r,a=e.getConfig("stagePadding")||0,d=function(e){let t=e.getState("popover");if(!t?.wrapper)return;let o=t.wrapper.getBoundingClientRect(),i=e.getConfig("stagePadding")||0,n=e.getConfig("popoverOffset")||0;return{width:o.width+i+n,height:o.height+i+n,realWidth:o.width,realHeight:o.height}}(e),v=i.arrow.getBoundingClientRect(),c=t.getBoundingClientRect(),u=c.top-d.height,f=u>=0,m=window.innerHeight-(c.bottom+d.height),w=m>=0,y=c.left-d.width,C=y>=0,S=window.innerWidth-(c.right+d.width),x=S>=0,b=!(f||w||C||x),k=l;if("top"===l&&f?x=C=w=!1:"bottom"===l&&w?x=C=f=!1:"left"===l&&C?x=f=w=!1:"right"===l&&x&&(C=f=w=!1),"over"===l){let e=window.innerWidth/2-d.realWidth/2,t=window.innerHeight/2-d.realHeight/2;i.wrapper.style.left=`${e}px`,i.wrapper.style.right="auto",i.wrapper.style.top=`${t}px`,i.wrapper.style.bottom="auto"}else if(b){let e=window.innerWidth/2-d?.realWidth/2;i.wrapper.style.left=`${e}px`,i.wrapper.style.right="auto",i.wrapper.style.bottom="10px",i.wrapper.style.top="auto"}else if(C){let e=Math.min(y,window.innerWidth-d?.realWidth-v.width),t=p(s,{elementDimensions:c,popoverDimensions:d,popoverPadding:a,popoverArrowDimensions:v});i.wrapper.style.left=`${e}px`,i.wrapper.style.top=`${t}px`,i.wrapper.style.bottom="auto",i.wrapper.style.right="auto",k="left"}else if(x){let e=Math.min(S,window.innerWidth-d?.realWidth-v.width),t=p(s,{elementDimensions:c,popoverDimensions:d,popoverPadding:a,popoverArrowDimensions:v});i.wrapper.style.right=`${e}px`,i.wrapper.style.top=`${t}px`,i.wrapper.style.bottom="auto",i.wrapper.style.left="auto",k="right"}else if(f){let e=Math.min(u,window.innerHeight-d.realHeight-v.width),t=g(s,{elementDimensions:c,popoverDimensions:d,popoverPadding:a,popoverArrowDimensions:v});i.wrapper.style.top=`${e}px`,i.wrapper.style.left=`${t}px`,i.wrapper.style.bottom="auto",i.wrapper.style.right="auto",k="top"}else if(w){let e=Math.min(m,window.innerHeight-d?.realHeight-v.width),t=g(s,{elementDimensions:c,popoverDimensions:d,popoverPadding:a,popoverArrowDimensions:v});i.wrapper.style.left=`${t}px`,i.wrapper.style.bottom=`${e}px`,i.wrapper.style.top="auto",i.wrapper.style.right="auto",k="bottom"}h(e,b?"over":k,s,t),[...i.wrapper.classList].filter(e=>e.startsWith("driver-popover-side-")||e.startsWith("driver-popover-align-")).forEach(e=>i.wrapper.classList.remove(e)),i.wrapper.classList.add(`driver-popover-side-${k}`),i.wrapper.classList.add(`driver-popover-align-${s}`)}var c=10,u=15;function f(e,t,o,i,n){let r=i-o;return e<=o&&t>=i?"start"===n?20:"end"===n?r-u-c/2:r/2:(Math.min(Math.max(e,o),i)+Math.min(Math.max(t,o),i))/2-o}function m(e,t){let o=u,i=t-u-c;if(io.top&&t.topo.left&&t.left{if(e.getState("__transitionCallback")!==C)return;let i=Date.now()-l,p=n-i<=n/2;o.popover&&p&&!y&&w&&(L(e,t,o),y=!0),e.getConfig("animate")&&i{e.classList.remove("driver-active-element-parent","driver-active-element-parent-no-scroll")}),d.classList.remove("driver-active-element","driver-no-interaction"),d.removeAttribute("aria-haspopup"),d.removeAttribute("aria-expanded"),d.removeAttribute("aria-controls"),(o.disableActiveInteraction??e.getConfig("disableActiveInteraction"))&&t.classList.add("driver-no-interaction");let S=t.parentElement;S&&S!==document.body&&(S.classList.add("driver-active-element-parent"),function(e){let t=window.getComputedStyle(e);return[t.overflow,t.overflowX,t.overflowY].some(e=>"auto"===e||"scroll"===e)}(S)&&S.classList.add("driver-active-element-parent-no-scroll")),t.classList.add("driver-active-element"),t.setAttribute("aria-haspopup","dialog"),t.setAttribute("aria-expanded","true"),t.setAttribute("aria-controls","driver-popover-content")}function S(e){let t=e.getState("__resizeTimeout");t&&window.cancelAnimationFrame(t),e.setState("__resizeTimeout",window.requestAnimationFrame(()=>y(e)))}function x(e,t){if(!e.getState("isInitialized")||"Tab"!==t.key&&9!==t.keyCode)return;let i=e.getState("__activeElement"),n=e.getState("popover")?.wrapper,r=o([...n?[n]:[],...i?[i]:[]]),s=r[0],l=r[r.length-1];t.preventDefault(),t.shiftKey?(r[r.indexOf(document.activeElement)-1]||l)?.focus():(r[r.indexOf(document.activeElement)+1]||s)?.focus()}var b=["pointerdown","mousedown","pointerup","mouseup","click"],k=new WeakMap;function _(e,t,o){E(e);let i=i=>{let n=i.target;e.contains(n)&&((!o||o(n))&&(i.preventDefault(),i.stopPropagation(),i.stopImmediatePropagation()),"click"===i.type&&t?.(i))};for(let e of b)document.addEventListener(e,i,!0);k.set(e,i)}function E(e){let t=k.get(e);if(t){for(let e of b)document.removeEventListener(e,t,!0);k.delete(e)}}function L(e,t,n){let r=e.getState("popover");r&&(E(r.wrapper),r.wrapper.remove()),r=function(){let e=document.createElement("div");e.classList.add("driver-popover");let t=document.createElement("div");t.classList.add("driver-popover-arrow");let o=document.createElement("header");o.id="driver-popover-title",o.classList.add("driver-popover-title"),o.style.display="none",o.innerText="Popover Title";let i=document.createElement("div");i.id="driver-popover-description",i.classList.add("driver-popover-description"),i.style.display="none",i.innerText="Popover description is here";let n=document.createElement("button");n.type="button",n.classList.add("driver-popover-close-btn"),n.setAttribute("aria-label","Close"),n.innerHTML="×";let r=document.createElement("footer");r.classList.add("driver-popover-footer");let s=document.createElement("span");s.classList.add("driver-popover-progress-text"),s.innerText="";let l=document.createElement("span");l.classList.add("driver-popover-navigation-btns");let a=document.createElement("button");a.type="button",a.classList.add("driver-popover-prev-btn","driver-popover-footer-btn"),a.innerHTML="Previous";let d=document.createElement("button");return d.type="button",d.classList.add("driver-popover-next-btn","driver-popover-footer-btn"),d.innerHTML="Next",l.appendChild(a),l.appendChild(d),r.appendChild(s),r.appendChild(l),e.appendChild(n),e.appendChild(t),e.appendChild(o),e.appendChild(i),e.appendChild(r),{wrapper:e,arrow:t,title:o,description:i,footer:r,previousButton:a,nextButton:d,closeButton:n,footerButtons:l,progress:s}}(),document.body.appendChild(r.wrapper);let{title:s,description:l,showButtons:a,disableButtons:d,showProgress:p,nextBtnText:g=e.getConfig("nextBtnText")||"Next",prevBtnText:c=e.getConfig("prevBtnText")||"Previous",progressText:u=e.getConfig("progressText")||"{current} of {total}"}=n.popover||{};r.nextButton.innerHTML=g,r.previousButton.innerHTML=c,r.progress.innerHTML=u;let f=e.getConfig("steps")||[],m=e.getState("activeIndex"),h=void 0!==m&&m===f.length-1;h&&r.nextButton.classList.add("driver-popover-done-btn"),s?(r.title.innerHTML=s,r.title.style.display="block"):r.title.style.display="none",l?(r.description.innerHTML=l,r.description.style.display="block"):r.description.style.display="none";let w=a||e.getConfig("showButtons"),y=p||e.getConfig("showProgress")||!1,C=w?.includes("next")||w?.includes("previous")||y;r.closeButton.style.display=w.includes("close")?"block":"none",C?(r.footer.style.display="flex",r.progress.style.display=y?"block":"none",r.nextButton.style.display=w.includes("next")?"block":"none",r.previousButton.style.display=w.includes("previous")?"block":"none"):r.footer.style.display="none";let S=d||e.getConfig("disableButtons")||[];S?.includes("next")&&(r.nextButton.disabled=!0,r.nextButton.classList.add("driver-popover-btn-disabled")),S?.includes("previous")&&(r.previousButton.disabled=!0,r.previousButton.classList.add("driver-popover-btn-disabled")),S?.includes("close")&&(r.closeButton.disabled=!0,r.closeButton.classList.add("driver-popover-btn-disabled"));let x=r.wrapper;x.style.display="block",x.style.left="",x.style.top="",x.style.bottom="",x.style.right="",x.id="driver-popover-content",x.setAttribute("role","dialog"),x.setAttribute("aria-labelledby","driver-popover-title"),x.setAttribute("aria-describedby","driver-popover-description"),r.arrow.className="driver-popover-arrow",x.className=`driver-popover ${n.popover?.popoverClass||e.getConfig("popoverClass")||""}`.trim(),_(r.wrapper,o=>{let i=o.target,r=n.popover?.onNextClick||e.getConfig("onNextClick"),s=n.popover?.onPrevClick||e.getConfig("onPrevClick"),l=n.popover?.onCloseClick||e.getConfig("onCloseClick"),a=n.popover?.onDoneClick||e.getConfig("onDoneClick");return i.closest(".driver-popover-next-btn")?h&&a?a(t,n,e.getHookOpts()):r?r(t,n,e.getHookOpts()):e.emit("nextClick"):i.closest(".driver-popover-prev-btn")?s?s(t,n,e.getHookOpts()):e.emit("prevClick"):i.closest(".driver-popover-close-btn")?l?l(t,n,e.getHookOpts()):e.emit("closeClick"):void 0},e=>!r?.description.contains(e)&&!r?.title.contains(e)&&!!e.closest(".driver-popover-prev-btn, .driver-popover-next-btn, .driver-popover-close-btn")),e.setState("popover",r);let b=n.popover?.onPopoverRender||e.getConfig("onPopoverRender");b&&b(r,e.getHookOpts()),v(e,t,n),function(e,t,o,i){t.wrapper.querySelectorAll("img").forEach(t=>{if(t.complete)return;let n=()=>v(e,o,i);t.addEventListener("load",n,{once:!0}),t.addEventListener("error",n,{once:!0})})}(e,r,t,n),i(e,x);let k=o([x,...t.classList.contains("driver-dummy-element")?[]:[t]]);k.length>0&&k[0].focus()}function H(t={}){let o=function(e={}){let t=function(){let e={};function t(t={}){e={animate:!0,duration:400,allowClose:!0,allowScroll:!0,overlayClickBehavior:"close",overlayOpacity:.7,smoothScroll:!1,disableActiveInteraction:!1,skipMissingElement:!1,showProgress:!1,stagePadding:10,stageRadius:5,popoverOffset:10,showButtons:["next","previous","close"],disableButtons:[],overlayColor:"#000",...t}}return t(),{getConfig:t=>t?e[t]:e,configure:t}}();t.configure(e);let o,i=function(){let e={};return{getState:t=>t?e[t]:e,setState:(t,o)=>{e[t]=o},resetState:function(){e={}}}}(),n=function(){let e={};return{listen:function(t,o){e[t]=o},emit:function(t){e[t]?.()},reset:function(){e={}}}}();return{getConfig:t.getConfig,setConfig:t.configure,getState:i.getState,setState:i.setState,resetState:i.resetState,listen:n.listen,emit:n.emit,resetEmitter:n.reset,getDriver:()=>o,setDriver:e=>{o=e},getHookOpts:e=>{let n=e||i.getState();return{config:t.getConfig(),state:n,driver:o,index:n.activeIndex}}}}(t);function i(){o.getConfig("allowClose")&&v()}function n(){let e=o.getConfig("overlayClickBehavior");if(o.getConfig("allowClose")&&"close"===e)v();else{if("function"==typeof e){let t=o.getState("__activeStep");return void e(o.getState("__activeElement"),t,o.getHookOpts())}if("nextStep"===e){let e=o.getState("activeStep"),t=o.getState("activeElement"),i=o.getConfig("steps")||[],n=o.getState("activeIndex")===i.length-1,s=e?.popover?.onDoneClick||o.getConfig("onDoneClick");if(n&&s)return void s(t,e,o.getHookOpts());let l=e?.popover?.onNextClick||o.getConfig("onNextClick");if(l)return void l(t,e,o.getHookOpts());r()}}}function r(){let e=o.getState("activeIndex"),t=o.getConfig("steps")||[];if(void 0===e)return;let i=e+1;t[i]?g(i):v()}function s(){let e=o.getState("activeIndex"),t=o.getConfig("steps")||[];if(void 0===e)return;let i=e-1;t[i]?g(i):v()}function l(){if(o.getState("__transitionCallback"))return;let e=o.getState("activeIndex"),t=o.getState("__activeStep"),i=o.getState("__activeElement");if(void 0===e||void 0===t||!(o.getConfig("steps")||[])[e-1])return;let n=t.popover?.onPrevClick||o.getConfig("onPrevClick");if(n)return n(i,t,o.getHookOpts());s()}function a(){if(o.getState("__transitionCallback"))return;let e=o.getState("activeIndex"),t=o.getState("__activeStep"),i=o.getState("__activeElement");if(void 0===e||void 0===t)return;let n=e===(o.getConfig("steps")||[]).length-1,s=t.popover?.onDoneClick||o.getConfig("onDoneClick");if(n&&s)return s(i,t,o.getHookOpts());let l=t.popover?.onNextClick||o.getConfig("onNextClick");if(l)return l(i,t,o.getHookOpts());r()}function d(){o.getState("isInitialized")||(o.setState("isInitialized",!0),document.body.classList.add("driver-active",o.getConfig("animate")?"driver-fade":"driver-simple"),o.getConfig("allowScroll")||document.body.classList.add("driver-no-scroll"),document.body.style.setProperty("--driver-animation-duration",`${o.getConfig("duration")||400}ms`),function(e){let t=t=>function(e,t){(e.getConfig("allowKeyboardControl")??1)&&("Escape"===t.key?e.emit("escapePress"):"ArrowRight"===t.key?e.emit("arrowRightPress"):"ArrowLeft"===t.key&&e.emit("arrowLeftPress"))}(e,t),o=t=>x(e,t),i=()=>S(e),n=()=>S(e);e.setState("__events",{onKeyup:t,onKeydown:o,onResize:i,onScroll:n}),window.addEventListener("keyup",t,!1),window.addEventListener("keydown",o,!1),window.addEventListener("resize",i),window.addEventListener("scroll",n)}(o),o.listen("overlayClick",n),o.listen("escapePress",i),o.listen("closeClick",i),o.listen("arrowLeftPress",l),o.listen("arrowRightPress",a))}function p(t){return!(!(t.skipMissingElement??o.getConfig("skipMissingElement"))||!t.element)&&!e(t.element)}function g(e=0){let t=o.getConfig("steps");if(!t)return console.error("No steps to drive through"),void v();if(!t[e])return void v();let i=t[e];if(p(i)){let i=o.getState("activeIndex"),n="number"==typeof i&&e!c?.length||c.includes(e)),f=i.popover?.onNextClick||o.getConfig("onNextClick"),m=i.popover?.onPrevClick||o.getConfig("onPrevClick"),h=i.popover?.onCloseClick||o.getConfig("onCloseClick");w(o,{...i,popover:{showButtons:u,nextBtnText:n?void 0:s,disableButtons:[...r?[]:["previous"]],showProgress:a,onNextClick:f||(()=>{n?g(e+1):v()}),onPrevClick:m||(()=>{g(e-1)}),onCloseClick:h||(()=>{v()}),...i?.popover||{},progressText:d}})}function v(e=!0){let t=o.getState("__activeElement"),i=o.getState("__activeStep"),n=o.getState("__activeOnDestroyed"),r=o.getConfig("onDestroyStarted");if(e&&r)return void r(t&&"driver-dummy-element"!==t?.id?t:void 0,i,o.getHookOpts());let s=i?.onDeselected||o.getConfig("onDeselected"),l=o.getConfig("onDestroyed");document.body.classList.remove("driver-active","driver-fade","driver-simple","driver-no-scroll"),document.body.style.removeProperty("--driver-animation-duration"),function(e){let t=e.getState("__events");t&&(window.removeEventListener("keyup",t.onKeyup),window.removeEventListener("keydown",t.onKeydown),window.removeEventListener("resize",t.onResize),window.removeEventListener("scroll",t.onScroll))}(o),function(e){let t=e.getState("popover");t&&(E(t.wrapper),t.wrapper.parentElement?.removeChild(t.wrapper))}(o),document.getElementById("driver-dummy-element")?.remove(),document.querySelectorAll(".driver-active-element").forEach(e=>{let t=e.parentElement;t&&t!==document.body&&t.classList.remove("driver-active-element-parent","driver-active-element-parent-no-scroll"),e.classList.remove("driver-active-element","driver-no-interaction"),e.removeAttribute("aria-haspopup"),e.removeAttribute("aria-expanded"),e.removeAttribute("aria-controls")}),function(e){let t=e.getState("__overlaySvg");t&&(E(t),t.remove())}(o),o.resetEmitter();let a=o.getState();if(o.resetState(),t&&i){let e="driver-dummy-element"===t.id;s&&s(e?void 0:t,i,o.getHookOpts(a)),l&&l(e?void 0:t,i,o.getHookOpts(a))}n&&n.focus()}let c={isActive:()=>o.getState("isInitialized")||!1,refresh:()=>S(o),drive:(e=0)=>{d(),g(e)},setConfig:o.setConfig,setSteps:e=>{o.resetState(),o.setConfig({...o.getConfig(),steps:e})},getConfig:o.getConfig,getState:o.getState,getActiveIndex:()=>o.getState("activeIndex"),isFirstStep:()=>0===o.getState("activeIndex"),isLastStep:()=>{let e=o.getConfig("steps")||[],t=o.getState("activeIndex");return void 0!==t&&t===e.length-1},getActiveStep:()=>o.getState("activeStep"),getActiveElement:()=>o.getState("activeElement"),getPreviousElement:()=>o.getState("previousElement"),getPreviousStep:()=>o.getState("previousStep"),getNextStep:()=>{let e=o.getConfig("steps")||[],t=o.getState("activeIndex");return void 0===t?void 0:e[t+1]},moveNext:r,movePrevious:s,moveTo:function(e){(o.getConfig("steps")||[])[e]?g(e):v()},hasNextStep:()=>{let e=o.getConfig("steps")||[],t=o.getState("activeIndex");return void 0!==t&&!!e[t+1]},hasPreviousStep:()=>{let e=o.getConfig("steps")||[],t=o.getState("activeIndex");return void 0!==t&&!!e[t-1]},highlight:e=>{d(),w(o,{...e,popover:e.popover?{showButtons:[],showProgress:!1,progressText:"",...e.popover}:void 0})},destroy:()=>{v(!1)}};return o.setDriver(c),c}export{H as driver}; \ No newline at end of file