var y = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, A = "Expected a function", C = 0 / 0, _ = "[object Symbol]", $ = /^\s+|\s+$/g, R = /^[-+]0x[0-9a-f]+$/i, H = /^0b[01]+$/i, W = /^0o[0-7]+$/i, F = parseInt, D = typeof y == "object" && y && y.Object === Object && y, P = typeof self == "object" && self && self.Object === Object && self, q = D || P || Function("return this")(), K = Object.prototype, U = K.toString, Y = Math.max, V = Math.min, v = function() {
return q.Date.now();
};
function X(t, e, n) {
var o, s, d, r, a, c, u = 0, x = !1, f = !1, b = !0;
if (typeof t != "function")
throw new TypeError(A);
e = O(e) || 0, E(n) && (x = !!n.leading, f = "maxWait" in n, d = f ? Y(O(n.maxWait) || 0, e) : d, b = "trailing" in n ? !!n.trailing : b);
function g(i) {
var l = o, p = s;
return o = s = void 0, u = i, r = t.apply(p, l), r;
}
function B(i) {
return u = i, a = setTimeout(m, e), x ? g(i) : r;
}
function M(i) {
var l = i - c, p = i - u, T = e - l;
return f ? V(T, d - p) : T;
}
function w(i) {
var l = i - c, p = i - u;
return c === void 0 || l >= e || l < 0 || f && p >= d;
}
function m() {
var i = v();
if (w(i))
return S(i);
a = setTimeout(m, M(i));
}
function S(i) {
return a = void 0, b && o ? g(i) : (o = s = void 0, r);
}
function I() {
a !== void 0 && clearTimeout(a), u = 0, o = c = s = a = void 0;
}
function N() {
return a === void 0 ? r : S(v());
}
function k() {
var i = v(), l = w(i);
if (o = arguments, s = this, c = i, l) {
if (a === void 0)
return B(c);
if (f)
return a = setTimeout(m, e), g(c);
}
return a === void 0 && (a = setTimeout(m, e)), r;
}
return k.cancel = I, k.flush = N, k;
}
function E(t) {
var e = typeof t;
return !!t && (e == "object" || e == "function");
}
function z(t) {
return !!t && typeof t == "object";
}
function G(t) {
return typeof t == "symbol" || z(t) && U.call(t) == _;
}
function O(t) {
if (typeof t == "number")
return t;
if (G(t))
return C;
if (E(t)) {
var e = typeof t.valueOf == "function" ? t.valueOf() : t;
t = E(e) ? e + "" : e;
}
if (typeof t != "string")
return t === 0 ? t : +t;
t = t.replace($, "");
var n = H.test(t);
return n || W.test(t) ? F(t.slice(2), n ? 2 : 8) : R.test(t) ? C : +t;
}
var Z = X;
const h = "copy-tuner-hidden";
class J {
// @ts-expect-error TS7006
constructor(e, n, o) {
this.element = e, this.data = n, this.callback = o, this.searchBoxElement = e.querySelector(".js-copy-tuner-bar-search"), this.logMenuElement = this.makeLogMenu(), this.element.append(this.logMenuElement), this.addHandler();
}
addHandler() {
this.element.querySelector(".js-copy-tuner-bar-open-log").addEventListener("click", (n) => {
n.preventDefault(), this.toggleLogMenu();
}), this.searchBoxElement.addEventListener("input", Z(this.onKeyup.bind(this), 250));
}
show() {
this.element.classList.remove(h), this.searchBoxElement.focus();
}
hide() {
this.element.classList.add(h);
}
showLogMenu() {
this.logMenuElement.classList.remove(h);
}
toggleLogMenu() {
this.logMenuElement.classList.toggle(h);
}
makeLogMenu() {
const e = document.createElement("div");
e.setAttribute("id", "copy-tuner-bar-log-menu"), e.classList.add(h);
const n = document.createElement("table"), o = document.createElement("tbody");
o.classList.remove("is-not-initialized");
for (const s of Object.keys(this.data).sort()) {
const d = this.data[s];
if (d === "")
continue;
const r = document.createElement("td");
r.textContent = s;
const a = document.createElement("td");
a.textContent = d;
const c = document.createElement("tr");
c.classList.add("copy-tuner-bar-log-menu__row"), c.dataset.key = s, c.addEventListener("click", ({ currentTarget: u }) => {
this.callback(u.dataset.key);
}), c.append(r), c.append(a), o.append(c);
}
return n.append(o), e.append(n), e;
}
// @ts-expect-error TS7031
onKeyup({ target: e }) {
const n = e.value.trim();
this.showLogMenu();
const o = [...this.logMenuElement.querySelectorAll("tr")];
for (const s of o) {
const d = n === "" || [...s.querySelectorAll("td")].some((r) => r.textContent.includes(n));
s.classList.toggle(h, !d);
}
}
}
const L = navigator.platform.toUpperCase().includes("MAC"), Q = (t) => !!(t.offsetWidth || t.offsetHeight || t.getClientRects().length > 0), ee = (t) => {
const e = t.getBoundingClientRect();
return {
top: e.top + (window.pageYOffset - document.documentElement.clientTop),
left: e.left + (window.pageXOffset - document.documentElement.clientLeft)
};
}, te = (t) => {
if (!Q(t))
return null;
const e = ee(t);
return e.right = e.left + t.offsetWidth, e.bottom = e.top + t.offsetHeight, {
left: e.left,
top: e.top,
// @ts-expect-error TS2339
width: e.right - e.left,
// @ts-expect-error TS2339
height: e.bottom - e.top
};
}, ne = 2e9;
class oe {
// @ts-expect-error TS7006
constructor(e, n, o) {
this.element = e, this.key = n, this.callback = o;
}
show() {
this.box = this.makeBox(), this.box !== null && (this.box.addEventListener("click", () => {
this.callback(this.key);
}), document.body.append(this.box));
}
remove() {
this.box && (this.box.remove(), this.box = null);
}
makeBox() {
const e = document.createElement("div");
e.classList.add("copyray-specimen"), e.classList.add("Specimen");
const n = te(this.element);
if (n === null)
return null;
for (const r of Object.keys(n)) {
const a = n[r];
e.style[r] = `${a}px`;
}
e.style.zIndex = ne;
const { position: o, top: s, left: d } = getComputedStyle(this.element);
return o === "fixed" && (this.box.style.position = "fixed", this.box.style.top = `${s}px`, this.box.style.left = `${d}px`), e.append(this.makeLabel()), e;
}
makeLabel() {
const e = document.createElement("div");
return e.classList.add("copyray-specimen-handle"), e.classList.add("Specimen"), e.textContent = this.key, e;
}
}
const se = () => {
const t = () => NodeFilter.FILTER_ACCEPT, e = document.createNodeIterator(document.body, NodeFilter.SHOW_COMMENT, t, !1), n = [];
let o;
for (; o = e.nextNode(); )
n.push(o);
return n.filter((s) => s.nodeValue.startsWith("COPYRAY")).map((s) => {
const [, d] = s.nodeValue.match(/^COPYRAY (\S*)$/), r = s.parentNode;
return { key: d, element: r };
});
};
class ie {
// @ts-expect-error TS7006
constructor(e, n) {
this.baseUrl = e, this.data = n, this.isShowing = !1, this.specimens = [], this.overlay = this.makeOverlay(), this.toggleButton = this.makeToggleButton(), this.boundOpen = this.open.bind(this), this.copyTunerBar = new J(document.querySelector("#copy-tuner-bar"), this.data, this.boundOpen);
}
show() {
this.reset(), document.body.append(this.overlay), this.makeSpecimens();
for (const e of this.specimens)
e.show();
this.copyTunerBar.show(), this.isShowing = !0;
}
hide() {
this.overlay.remove(), this.reset(), this.copyTunerBar.hide(), this.isShowing = !1;
}
toggle() {
this.isShowing ? this.hide() : this.show();
}
// @ts-expect-error TS7006
open(e) {
window.open(`${this.baseUrl}/blurbs/${e}/edit`);
}
makeSpecimens() {
for (const { element: e, key: n } of se())
this.specimens.push(new oe(e, n, this.boundOpen));
}
makeToggleButton() {
const e = document.createElement("a");
return e.addEventListener("click", () => {
this.show();
}), e.classList.add("copyray-toggle-button"), e.classList.add("hidden-on-mobile"), e.textContent = "Open CopyTuner", document.body.append(e), e;
}
makeOverlay() {
const e = document.createElement("div");
return e.setAttribute("id", "copyray-overlay"), e.addEventListener("click", () => this.hide()), e;
}
reset() {
for (const e of this.specimens)
e.remove();
}
}
const re = (t) => {
const e = document.createElement("div");
e.id = "copy-tuner-bar", e.classList.add("copy-tuner-hidden"), e.innerHTML = `
CopyTuner
Sync
Translations in this page
`, document.body.append(e);
}, j = () => {
const { url: t, data: e } = window.CopyTuner;
re(t);
const n = new ie(t, e);
window.CopyTuner.toggle = () => n.toggle(), document.addEventListener("keydown", (o) => {
if (n.isShowing && ["Escape", "Esc"].includes(o.key)) {
n.hide();
return;
}
(L && o.metaKey || !L && o.ctrlKey) && o.shiftKey && o.key.toLowerCase() === "k" && n.toggle();
}), console && console.log(`Ready to Copyray. Press ${L ? "cmd+shift+k" : "ctrl+shift+k"} to scan your UI.`);
};
document.readyState === "complete" || document.readyState !== "loading" ? j() : document.addEventListener("DOMContentLoaded", () => j());