@oslokommune/punkt-elements
Version:
Komponentbiblioteket til Punkt, et designsystem laget av Oslo Origo
281 lines (280 loc) • 13.4 kB
JavaScript
//#region ../../node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js
var e = window.CustomEvent;
(!e || typeof e == "object") && (e = function(e, t) {
t ||= {};
var n = document.createEvent("CustomEvent");
return n.initCustomEvent(e, !!t.bubbles, !!t.cancelable, t.detail || null), n;
}, e.prototype = window.Event.prototype);
function t(e, t) {
var n = "on" + t.type.toLowerCase();
return typeof e[n] == "function" && e[n](t), e.dispatchEvent(t);
}
function n(e) {
for (; e && e !== document.body;) {
var t = window.getComputedStyle(e), n = function(e, n) {
return !(t[e] === void 0 || t[e] === n);
};
if (t.opacity < 1 || n("zIndex", "auto") || n("transform", "none") || n("mixBlendMode", "normal") || n("filter", "none") || n("perspective", "none") || t.isolation === "isolate" || t.position === "fixed" || t.webkitOverflowScrolling === "touch") return !0;
e = e.parentElement;
}
return !1;
}
function r(e) {
for (; e;) {
if (e.localName === "dialog") return e;
e = e.parentElement ? e.parentElement : e.parentNode ? e.parentNode.host : null;
}
return null;
}
function i(e) {
for (; e && e.shadowRoot && e.shadowRoot.activeElement;) e = e.shadowRoot.activeElement;
e && e.blur && e !== document.body && e.blur();
}
function a(e, t) {
for (var n = 0; n < e.length; ++n) if (e[n] === t) return !0;
return !1;
}
function o(e) {
return !e || !e.hasAttribute("method") ? !1 : e.getAttribute("method").toLowerCase() === "dialog";
}
function s(e) {
var t = [
"button",
"input",
"keygen",
"select",
"textarea"
].map(function(e) {
return e + ":not([disabled])";
});
t.push("[tabindex]:not([disabled]):not([tabindex=\"\"])");
var n = e.querySelector(t.join(", "));
if (!n && "attachShadow" in Element.prototype) for (var r = e.querySelectorAll("*"), i = 0; i < r.length && !(r[i].tagName && r[i].shadowRoot && (n = s(r[i].shadowRoot), n)); i++);
return n;
}
function c(e) {
return e.isConnected || document.body.contains(e);
}
function l(e) {
if (e.submitter) return e.submitter;
var t = e.target;
if (!(t instanceof HTMLFormElement)) return null;
var n = f.formSubmitter;
if (!n) {
var r = e.target;
n = ("getRootNode" in r && r.getRootNode() || document).activeElement;
}
return !n || n.form !== t ? null : n;
}
function u(e) {
if (!e.defaultPrevented) {
var t = e.target, n = f.imagemapUseValue, i = l(e);
n === null && i && (n = i.value);
var a = r(t);
a && (i && i.getAttribute("formmethod") || t.getAttribute("method")) === "dialog" && (e.preventDefault(), n == null ? a.close() : a.close(n));
}
}
function d(e) {
if (this.dialog_ = e, this.replacedStyleTop_ = !1, this.openAsModal_ = !1, e.hasAttribute("role") || e.setAttribute("role", "dialog"), e.show = this.show.bind(this), e.showModal = this.showModal.bind(this), e.close = this.close.bind(this), e.addEventListener("submit", u, !1), "returnValue" in e || (e.returnValue = ""), "MutationObserver" in window) new MutationObserver(this.maybeHideModal.bind(this)).observe(e, {
attributes: !0,
attributeFilter: ["open"]
});
else {
var t = !1, n = function() {
t ? this.downgradeModal() : this.maybeHideModal(), t = !1;
}.bind(this), r, i = function(i) {
if (i.target === e) {
var a = "DOMNodeRemoved";
t |= i.type.substr(0, a.length) === a, window.clearTimeout(r), r = window.setTimeout(n, 0);
}
};
[
"DOMAttrModified",
"DOMNodeRemoved",
"DOMNodeRemovedFromDocument"
].forEach(function(t) {
e.addEventListener(t, i);
});
}
Object.defineProperty(e, "open", {
set: this.setOpen.bind(this),
get: e.hasAttribute.bind(e, "open")
}), this.backdrop_ = document.createElement("div"), this.backdrop_.className = "backdrop", this.backdrop_.addEventListener("mouseup", this.backdropMouseEvent_.bind(this)), this.backdrop_.addEventListener("mousedown", this.backdropMouseEvent_.bind(this)), this.backdrop_.addEventListener("click", this.backdropMouseEvent_.bind(this));
}
d.prototype = {
get dialog() {
return this.dialog_;
},
maybeHideModal: function() {
this.dialog_.hasAttribute("open") && c(this.dialog_) || this.downgradeModal();
},
downgradeModal: function() {
this.openAsModal_ && (this.openAsModal_ = !1, this.dialog_.style.zIndex = "", this.replacedStyleTop_ &&= (this.dialog_.style.top = "", !1), this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_), f.dm.removeDialog(this));
},
setOpen: function(e) {
e ? this.dialog_.hasAttribute("open") || this.dialog_.setAttribute("open", "") : (this.dialog_.removeAttribute("open"), this.maybeHideModal());
},
backdropMouseEvent_: function(e) {
if (this.dialog_.hasAttribute("tabindex")) this.dialog_.focus();
else {
var t = document.createElement("div");
this.dialog_.insertBefore(t, this.dialog_.firstChild), t.tabIndex = -1, t.focus(), this.dialog_.removeChild(t);
}
var n = document.createEvent("MouseEvents");
n.initMouseEvent(e.type, e.bubbles, e.cancelable, window, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget), this.dialog_.dispatchEvent(n), e.stopPropagation();
},
focus_: function() {
var e = this.dialog_.querySelector("[autofocus]:not([disabled])");
!e && this.dialog_.tabIndex >= 0 && (e = this.dialog_), e ||= s(this.dialog_), i(document.activeElement), e && e.focus();
},
updateZIndex: function(e, t) {
if (e < t) throw Error("dialogZ should never be < backdropZ");
this.dialog_.style.zIndex = e, this.backdrop_.style.zIndex = t;
},
show: function() {
this.dialog_.open || (this.setOpen(!0), this.focus_());
},
showModal: function() {
if (this.dialog_.hasAttribute("open")) throw Error("Failed to execute 'showModal' on dialog: The element is already open, and therefore cannot be opened modally.");
if (!c(this.dialog_)) throw Error("Failed to execute 'showModal' on dialog: The element is not in a Document.");
if (!f.dm.pushDialog(this)) throw Error("Failed to execute 'showModal' on dialog: There are too many open modal dialogs.");
n(this.dialog_.parentElement) && console.warn("A dialog is being shown inside a stacking context. This may cause it to be unusable. For more information, see this link: https://github.com/GoogleChrome/dialog-polyfill/#stacking-context"), this.setOpen(!0), this.openAsModal_ = !0, f.needsCentering(this.dialog_) ? (f.reposition(this.dialog_), this.replacedStyleTop_ = !0) : this.replacedStyleTop_ = !1, this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling), this.focus_();
},
close: function(n) {
if (!this.dialog_.hasAttribute("open")) throw Error("Failed to execute 'close' on dialog: The element does not have an 'open' attribute, and therefore cannot be closed.");
this.setOpen(!1), n !== void 0 && (this.dialog_.returnValue = n);
var r = new e("close", {
bubbles: !1,
cancelable: !1
});
t(this.dialog_, r);
}
};
var f = {};
if (f.reposition = function(e) {
var t = document.body.scrollTop || document.documentElement.scrollTop, n = t + (window.innerHeight - e.offsetHeight) / 2;
e.style.top = Math.max(t, n) + "px";
}, f.isInlinePositionSetByStylesheet = function(e) {
for (var t = 0; t < document.styleSheets.length; ++t) {
var n = document.styleSheets[t], r = null;
try {
r = n.cssRules;
} catch {}
if (r) for (var i = 0; i < r.length; ++i) {
var o = r[i], s = null;
try {
s = document.querySelectorAll(o.selectorText);
} catch {}
if (!(!s || !a(s, e))) {
var c = o.style.getPropertyValue("top"), l = o.style.getPropertyValue("bottom");
if (c && c !== "auto" || l && l !== "auto") return !0;
}
}
}
return !1;
}, f.needsCentering = function(e) {
return window.getComputedStyle(e).position !== "absolute" || e.style.top !== "auto" && e.style.top !== "" || e.style.bottom !== "auto" && e.style.bottom !== "" ? !1 : !f.isInlinePositionSetByStylesheet(e);
}, f.forceRegisterDialog = function(e) {
if ((window.HTMLDialogElement || e.showModal) && console.warn("This browser already supports <dialog>, the polyfill may not work correctly", e), e.localName !== "dialog") throw Error("Failed to register dialog: The element is not a dialog.");
new d(e);
}, f.registerDialog = function(e) {
e.showModal || f.forceRegisterDialog(e);
}, f.DialogManager = function() {
this.pendingDialogStack = [];
var e = this.checkDOM_.bind(this);
this.overlay = document.createElement("div"), this.overlay.className = "_dialog_overlay", this.overlay.addEventListener("click", function(t) {
this.forwardTab_ = void 0, t.stopPropagation(), e([]);
}.bind(this)), this.handleKey_ = this.handleKey_.bind(this), this.handleFocus_ = this.handleFocus_.bind(this), this.zIndexLow_ = 1e5, this.zIndexHigh_ = 100150, this.forwardTab_ = void 0, "MutationObserver" in window && (this.mo_ = new MutationObserver(function(t) {
var n = [];
t.forEach(function(e) {
for (var t = 0, r; r = e.removedNodes[t]; ++t) {
if (r instanceof Element) r.localName === "dialog" && n.push(r);
else continue;
n = n.concat(r.querySelectorAll("dialog"));
}
}), n.length && e(n);
}));
}, f.DialogManager.prototype.blockDocument = function() {
document.documentElement.addEventListener("focus", this.handleFocus_, !0), document.addEventListener("keydown", this.handleKey_), this.mo_ && this.mo_.observe(document, {
childList: !0,
subtree: !0
});
}, f.DialogManager.prototype.unblockDocument = function() {
document.documentElement.removeEventListener("focus", this.handleFocus_, !0), document.removeEventListener("keydown", this.handleKey_), this.mo_ && this.mo_.disconnect();
}, f.DialogManager.prototype.updateStacking = function() {
for (var e = this.zIndexHigh_, t = 0, n; n = this.pendingDialogStack[t]; ++t) n.updateZIndex(--e, --e), t === 0 && (this.overlay.style.zIndex = --e);
var r = this.pendingDialogStack[0];
r ? (r.dialog.parentNode || document.body).appendChild(this.overlay) : this.overlay.parentNode && this.overlay.parentNode.removeChild(this.overlay);
}, f.DialogManager.prototype.containedByTopDialog_ = function(e) {
for (; e = r(e);) {
for (var t = 0, n; n = this.pendingDialogStack[t]; ++t) if (n.dialog === e) return t === 0;
e = e.parentElement;
}
return !1;
}, f.DialogManager.prototype.handleFocus_ = function(e) {
var t = e.composedPath ? e.composedPath()[0] : e.target;
if (!this.containedByTopDialog_(t) && document.activeElement !== document.documentElement && (e.preventDefault(), e.stopPropagation(), i(t), this.forwardTab_ !== void 0)) {
var n = this.pendingDialogStack[0];
return n.dialog.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_PRECEDING && (this.forwardTab_ ? n.focus_() : t !== document.documentElement && document.documentElement.focus()), !1;
}
}, f.DialogManager.prototype.handleKey_ = function(n) {
if (this.forwardTab_ = void 0, n.keyCode === 27) {
n.preventDefault(), n.stopPropagation();
var r = new e("cancel", {
bubbles: !1,
cancelable: !0
}), i = this.pendingDialogStack[0];
i && t(i.dialog, r) && i.dialog.close();
} else n.keyCode === 9 && (this.forwardTab_ = !n.shiftKey);
}, f.DialogManager.prototype.checkDOM_ = function(e) {
this.pendingDialogStack.slice().forEach(function(t) {
e.indexOf(t.dialog) === -1 ? t.maybeHideModal() : t.downgradeModal();
});
}, f.DialogManager.prototype.pushDialog = function(e) {
var t = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1;
return this.pendingDialogStack.length >= t ? !1 : (this.pendingDialogStack.unshift(e) === 1 && this.blockDocument(), this.updateStacking(), !0);
}, f.DialogManager.prototype.removeDialog = function(e) {
var t = this.pendingDialogStack.indexOf(e);
t !== -1 && (this.pendingDialogStack.splice(t, 1), this.pendingDialogStack.length === 0 && this.unblockDocument(), this.updateStacking());
}, f.dm = new f.DialogManager(), f.formSubmitter = null, f.imagemapUseValue = null, window.HTMLDialogElement === void 0) {
var p = document.createElement("form");
if (p.setAttribute("method", "dialog"), p.method !== "dialog") {
var m = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, "method");
if (m) {
var h = m.get;
m.get = function() {
return o(this) ? "dialog" : h.call(this);
};
var g = m.set;
m.set = function(e) {
return typeof e == "string" && e.toLowerCase() === "dialog" ? this.setAttribute("method", e) : g.call(this, e);
}, Object.defineProperty(HTMLFormElement.prototype, "method", m);
}
}
document.addEventListener("click", function(e) {
if (f.formSubmitter = null, f.imagemapUseValue = null, !e.defaultPrevented) {
var t = e.target;
if ("composedPath" in e && (t = e.composedPath().shift() || t), !(!t || !o(t.form))) {
if (!(t.type === "submit" && ["button", "input"].indexOf(t.localName) > -1)) {
if (!(t.localName === "input" && t.type === "image")) return;
f.imagemapUseValue = e.offsetX + "," + e.offsetY;
}
r(t) && (f.formSubmitter = t);
}
}
}, !1), document.addEventListener("submit", function(e) {
var t = e.target;
if (!r(t)) {
var n = l(e);
(n && n.getAttribute("formmethod") || t.getAttribute("method")) === "dialog" && e.preventDefault();
}
});
var _ = HTMLFormElement.prototype.submit, v = function() {
if (!o(this)) return _.call(this);
var e = r(this);
e && e.close();
};
HTMLFormElement.prototype.submit = v;
}
//#endregion
export { f as default };