@scalar/api-client
Version:
the open source API testing client
84 lines (83 loc) • 3.13 kB
JavaScript
import { defineComponent as g, ref as y, onMounted as x, onBeforeUnmount as h, createBlock as D, openBlock as p, Transition as E, withCtx as T, createElementBlock as _, createCommentVNode as L, createElementVNode as s, createVNode as C, unref as b } from "vue";
import { ScalarIcon as k } from "@scalar/components";
const A = {
key: 0,
class: "bg-b-2 fixed right-1/2 bottom-1/2 z-50 h-64 w-64 translate-x-1/2 translate-y-1/2 rounded-xl border transition-opacity duration-200 md:right-10 md:bottom-10 md:translate-x-0 md:translate-y-0"
}, w = { class: "flex h-full flex-col items-center justify-center" }, V = /* @__PURE__ */ g({
__name: "DropEventListener",
emits: ["input"],
setup(B, { emit: v }) {
const l = v, a = y(!1);
let o = 0;
x(() => {
document.addEventListener("dragenter", m), document.addEventListener("dragleave", f), document.addEventListener("dragover", c), document.addEventListener("drop", u);
}), h(() => {
document.removeEventListener("dragenter", m), document.removeEventListener("dragover", c), document.removeEventListener("dragleave", f), document.removeEventListener("drop", u);
});
function d(e) {
return e.dataTransfer?.types.includes("text/html") ?? !1;
}
function u(e) {
if (e.preventDefault(), a.value = !1, o = 0, !d(e) && e.dataTransfer) {
const t = e.dataTransfer.getData("text").replace(/^blob:/, "");
if (t)
l("input", t, null, "drop");
else if (e.dataTransfer.files.length > 0) {
const n = e.dataTransfer.files[0];
if (!n)
return;
const r = new FileReader();
r.onload = (i) => {
i.target && typeof i.target.result == "string" && l("input", i.target.result, null, "drop");
}, r.readAsText(n);
}
}
}
function c(e) {
e.preventDefault();
}
function f(e) {
e.preventDefault(), o--, o === 0 && (a.value = !1);
}
function m(e) {
if (e.preventDefault(), o++, !d(e)) {
if (e.dataTransfer) {
const t = e.dataTransfer.items;
for (let n = 0; n < t.length; n++) {
const r = t[n];
if (r?.kind === "string" || r?.type?.includes("json") || r?.type?.includes("yml") || r?.type?.includes("yaml")) {
a.value = !0;
return;
}
}
}
a.value = !1;
}
}
return (e, t) => (p(), D(E, {
enterActiveClass: "transition-opacity duration-200",
enterFromClass: "opacity-0",
leaveActiveClass: "transition-opacity duration-200",
leaveToClass: "opacity-0"
}, {
default: T(() => [
a.value ? (p(), _("div", A, [
s("div", w, [
s("div", null, [
C(b(k), {
icon: "Download",
size: "xl",
thickness: "2"
})
]),
t[0] || (t[0] = s("div", { class: "text-c-1 m-4 text-center" }, " Drop your OpenAPI document here ", -1))
])
])) : L("", !0)
]),
_: 1
}));
}
});
export {
V as default
};