// ==UserScript==
// @name WELearn网课助手
// @namespace https://github.com/SSmJaE/WELearnHelper
// @version 1.0.0
// @author SSmJaE
// @description 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;开放自定义设置
// @license GPL-3.0
// @icon https://vitejs.dev/logo.svg
// @homepage https://www.github.com/SSmJaE/
// @match *://course.sflep.com/*
// @match *://welearn.sflep.com/*
// @match *://courseappserver.sflep.com/*
// @match *://centercourseware.sflep.com/*
// @require https://cdn.jsdelivr.net/npm/react@18.2.0/umd/react.production.min.js
// @require https://cdn.jsdelivr.net/npm/react-dom@18.2.0/umd/react-dom.production.min.js
// @connect localhost
// @connect 47.100.166.53
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @run-at document-end
// @downloadURL none
// ==/UserScript==
(i=>{const e=document.createElement("style");e.dataset.source="vite-plugin-monkey",e.innerText=i,document.head.appendChild(e)})(' [data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{display:none;width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:" ";display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging,[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:"";background:#000;border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{top:2px;bottom:2px;left:2px;right:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:0;bottom:0;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none} ');
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => {
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
return value;
};
(function(React$1, require$$2) {
var _a, _b, _c;
"use strict";
function _interopNamespaceDefault(e2) {
const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
if (e2) {
for (const k2 in e2) {
if (k2 !== "default") {
const d2 = Object.getOwnPropertyDescriptor(e2, k2);
Object.defineProperty(n2, k2, d2.get ? d2 : {
enumerable: true,
get: () => e2[k2]
});
}
}
}
n2.default = e2;
return Object.freeze(n2);
}
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React$1);
const require$$2__namespace = /* @__PURE__ */ _interopNamespaceDefault(require$$2);
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function getDefaultExportFromCjs(x2) {
return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
}
function getAugmentedNamespace(n2) {
if (n2.__esModule)
return n2;
var f2 = n2.default;
if (typeof f2 == "function") {
var a2 = function a3() {
if (this instanceof a3) {
var args = [null];
args.push.apply(args, arguments);
var Ctor = Function.bind.apply(f2, args);
return new Ctor();
}
return f2.apply(this, arguments);
};
a2.prototype = f2.prototype;
} else
a2 = {};
Object.defineProperty(a2, "__esModule", { value: true });
Object.keys(n2).forEach(function(k2) {
var d2 = Object.getOwnPropertyDescriptor(n2, k2);
Object.defineProperty(a2, k2, d2.get ? d2 : {
enumerable: true,
get: function() {
return n2[k2];
}
});
});
return a2;
}
var jsxRuntimeExports = {};
var jsxRuntime = {
get exports() {
return jsxRuntimeExports;
},
set exports(v2) {
jsxRuntimeExports = v2;
}
};
var reactJsxRuntime_production_min = {};
/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var f$6 = React$1, k$5 = Symbol.for("react.element"), l$8 = Symbol.for("react.fragment"), m$7 = Object.prototype.hasOwnProperty, n$6 = f$6.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, p$7 = { key: true, ref: true, __self: true, __source: true };
function q$4(c2, a2, g2) {
var b2, d2 = {}, e2 = null, h2 = null;
void 0 !== g2 && (e2 = "" + g2);
void 0 !== a2.key && (e2 = "" + a2.key);
void 0 !== a2.ref && (h2 = a2.ref);
for (b2 in a2)
m$7.call(a2, b2) && !p$7.hasOwnProperty(b2) && (d2[b2] = a2[b2]);
if (c2 && c2.defaultProps)
for (b2 in a2 = c2.defaultProps, a2)
void 0 === d2[b2] && (d2[b2] = a2[b2]);
return { $$typeof: k$5, type: c2, key: e2, ref: h2, props: d2, _owner: n$6.current };
}
reactJsxRuntime_production_min.Fragment = l$8;
reactJsxRuntime_production_min.jsx = q$4;
reactJsxRuntime_production_min.jsxs = q$4;
(function(module) {
{
module.exports = reactJsxRuntime_production_min;
}
})(jsxRuntime);
const Fragment = jsxRuntimeExports.Fragment;
const jsx = jsxRuntimeExports.jsx;
const jsxs = jsxRuntimeExports.jsxs;
const e$3 = Symbol(), t$3 = Symbol(), r$6 = "a", n$5 = "w";
let o$2 = (e2, t2) => new Proxy(e2, t2);
const s$2 = Object.getPrototypeOf, c$7 = /* @__PURE__ */ new WeakMap(), l$7 = (e2) => e2 && (c$7.has(e2) ? c$7.get(e2) : s$2(e2) === Object.prototype || s$2(e2) === Array.prototype), f$5 = (e2) => "object" == typeof e2 && null !== e2, i$3 = (e2) => {
if (Array.isArray(e2))
return Array.from(e2);
const t2 = Object.getOwnPropertyDescriptors(e2);
return Object.values(t2).forEach((e3) => {
e3.configurable = true;
}), Object.create(s$2(e2), t2);
}, u$6 = (e2) => e2[t$3] || e2, a$2 = (s2, c2, f2, p2) => {
if (!l$7(s2))
return s2;
let g2 = p2 && p2.get(s2);
if (!g2) {
const e2 = u$6(s2);
g2 = ((e3) => Object.values(Object.getOwnPropertyDescriptors(e3)).some((e4) => !e4.configurable && !e4.writable))(e2) ? [e2, i$3(e2)] : [e2], null == p2 || p2.set(s2, g2);
}
const [y2, h2] = g2;
let w2 = f2 && f2.get(y2);
return w2 && w2[1].f === !!h2 || (w2 = ((o2, s3) => {
const c3 = { f: s3 };
let l2 = false;
const f3 = (e2, t2) => {
if (!l2) {
let s4 = c3[r$6].get(o2);
if (s4 || (s4 = {}, c3[r$6].set(o2, s4)), e2 === n$5)
s4[n$5] = true;
else {
let r2 = s4[e2];
r2 || (r2 = /* @__PURE__ */ new Set(), s4[e2] = r2), r2.add(t2);
}
}
}, i2 = { get: (e2, n2) => n2 === t$3 ? o2 : (f3("k", n2), a$2(Reflect.get(e2, n2), c3[r$6], c3.c)), has: (t2, n2) => n2 === e$3 ? (l2 = true, c3[r$6].delete(o2), true) : (f3("h", n2), Reflect.has(t2, n2)), getOwnPropertyDescriptor: (e2, t2) => (f3("o", t2), Reflect.getOwnPropertyDescriptor(e2, t2)), ownKeys: (e2) => (f3(n$5), Reflect.ownKeys(e2)) };
return s3 && (i2.set = i2.deleteProperty = () => false), [i2, c3];
})(y2, !!h2), w2[1].p = o$2(h2 || y2, w2[0]), f2 && f2.set(y2, w2)), w2[1][r$6] = c2, w2[1].c = f2, w2[1].p;
}, p$6 = (e2, t2, r2, o2) => {
if (Object.is(e2, t2))
return false;
if (!f$5(e2) || !f$5(t2))
return true;
const s2 = r2.get(u$6(e2));
if (!s2)
return true;
if (o2) {
const r3 = o2.get(e2);
if (r3 && r3.n === t2)
return r3.g;
o2.set(e2, { n: t2, g: false });
}
let c2 = null;
try {
for (const r3 of s2.h || [])
if (c2 = Reflect.has(e2, r3) !== Reflect.has(t2, r3), c2)
return c2;
if (true === s2[n$5]) {
if (c2 = ((e3, t3) => {
const r3 = Reflect.ownKeys(e3), n2 = Reflect.ownKeys(t3);
return r3.length !== n2.length || r3.some((e4, t4) => e4 !== n2[t4]);
})(e2, t2), c2)
return c2;
} else
for (const r3 of s2.o || [])
if (c2 = !!Reflect.getOwnPropertyDescriptor(e2, r3) != !!Reflect.getOwnPropertyDescriptor(t2, r3), c2)
return c2;
for (const n2 of s2.k || [])
if (c2 = p$6(e2[n2], t2[n2], r2, o2), c2)
return c2;
return null === c2 && (c2 = true), c2;
} finally {
o2 && o2.set(e2, { n: t2, g: c2 });
}
}, y$7 = (e2) => l$7(e2) && e2[t$3] || null, h$8 = (e2, t2 = true) => {
c$7.set(e2, t2);
}, w$4 = (e2, t2, r2) => {
const o2 = [], s2 = /* @__PURE__ */ new WeakSet(), c2 = (e3, l2) => {
if (s2.has(e3))
return;
f$5(e3) && s2.add(e3);
const i2 = f$5(e3) && t2.get(u$6(e3));
if (i2) {
var a2, p2;
if (null == (a2 = i2.h) || a2.forEach((e4) => {
const t3 = `:has(${String(e4)})`;
o2.push(l2 ? [...l2, t3] : [t3]);
}), true === i2[n$5]) {
const e4 = ":ownKeys";
o2.push(l2 ? [...l2, e4] : [e4]);
} else {
var g2;
null == (g2 = i2.o) || g2.forEach((e4) => {
const t3 = `:hasOwn(${String(e4)})`;
o2.push(l2 ? [...l2, t3] : [t3]);
});
}
null == (p2 = i2.k) || p2.forEach((t3) => {
r2 && !("value" in (Object.getOwnPropertyDescriptor(e3, t3) || {})) || c2(e3[t3], l2 ? [...l2, t3] : [t3]);
});
} else
l2 && o2.push(l2);
};
return c2(e2), o2;
};
const isObject$6 = (x2) => typeof x2 === "object" && x2 !== null;
const proxyStateMap = /* @__PURE__ */ new WeakMap();
const refSet = /* @__PURE__ */ new WeakSet();
const buildProxyFunction = (objectIs = Object.is, newProxy = (target, handler) => new Proxy(target, handler), canProxy = (x2) => isObject$6(x2) && !refSet.has(x2) && (Array.isArray(x2) || !(Symbol.iterator in x2)) && !(x2 instanceof WeakMap) && !(x2 instanceof WeakSet) && !(x2 instanceof Error) && !(x2 instanceof Number) && !(x2 instanceof Date) && !(x2 instanceof String) && !(x2 instanceof RegExp) && !(x2 instanceof ArrayBuffer), defaultHandlePromise = (promise) => {
switch (promise.status) {
case "fulfilled":
return promise.value;
case "rejected":
throw promise.reason;
default:
throw promise;
}
}, snapCache = /* @__PURE__ */ new WeakMap(), createSnapshot = (target, version, handlePromise = defaultHandlePromise) => {
const cache = snapCache.get(target);
if ((cache == null ? void 0 : cache[0]) === version) {
return cache[1];
}
const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));
h$8(snap, true);
snapCache.set(target, [version, snap]);
Reflect.ownKeys(target).forEach((key) => {
if (Object.getOwnPropertyDescriptor(snap, key)) {
return;
}
const value = Reflect.get(target, key);
const desc = {
value,
enumerable: true,
// This is intentional to avoid copying with proxy-compare.
// It's still non-writable, so it avoids assigning a value.
configurable: true
};
if (refSet.has(value)) {
h$8(value, false);
} else if (value instanceof Promise) {
delete desc.value;
desc.get = () => handlePromise(value);
} else if (proxyStateMap.has(value)) {
const [target2, ensureVersion] = proxyStateMap.get(
value
);
desc.value = createSnapshot(
target2,
ensureVersion(),
handlePromise
);
}
Object.defineProperty(snap, key, desc);
});
return snap;
}, proxyCache = /* @__PURE__ */ new WeakMap(), versionHolder = [1, 1], proxyFunction = (initialObject) => {
if (!isObject$6(initialObject)) {
throw new Error("object required");
}
const found = proxyCache.get(initialObject);
if (found) {
return found;
}
let version = versionHolder[0];
const listeners = /* @__PURE__ */ new Set();
const notifyUpdate = (op, nextVersion = ++versionHolder[0]) => {
if (version !== nextVersion) {
version = nextVersion;
listeners.forEach((listener) => listener(op, nextVersion));
}
};
let checkVersion = versionHolder[1];
const ensureVersion = (nextCheckVersion = ++versionHolder[1]) => {
if (checkVersion !== nextCheckVersion && !listeners.size) {
checkVersion = nextCheckVersion;
propProxyStates.forEach(([propProxyState]) => {
const propVersion = propProxyState[1](nextCheckVersion);
if (propVersion > version) {
version = propVersion;
}
});
}
return version;
};
const createPropListener = (prop) => (op, nextVersion) => {
const newOp = [...op];
newOp[1] = [prop, ...newOp[1]];
notifyUpdate(newOp, nextVersion);
};
const propProxyStates = /* @__PURE__ */ new Map();
const addPropListener = (prop, propProxyState) => {
if (({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production" && propProxyStates.has(prop)) {
throw new Error("prop listener already exists");
}
if (listeners.size) {
const remove = propProxyState[3](createPropListener(prop));
propProxyStates.set(prop, [propProxyState, remove]);
} else {
propProxyStates.set(prop, [propProxyState]);
}
};
const removePropListener = (prop) => {
var _a2;
const entry = propProxyStates.get(prop);
if (entry) {
propProxyStates.delete(prop);
(_a2 = entry[1]) == null ? void 0 : _a2.call(entry);
}
};
const addListener = (listener) => {
listeners.add(listener);
if (listeners.size === 1) {
propProxyStates.forEach(([propProxyState, prevRemove], prop) => {
if (({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production" && prevRemove) {
throw new Error("remove already exists");
}
const remove = propProxyState[3](createPropListener(prop));
propProxyStates.set(prop, [propProxyState, remove]);
});
}
const removeListener = () => {
listeners.delete(listener);
if (listeners.size === 0) {
propProxyStates.forEach(([propProxyState, remove], prop) => {
if (remove) {
remove();
propProxyStates.set(prop, [propProxyState]);
}
});
}
};
return removeListener;
};
const baseObject = Array.isArray(initialObject) ? [] : Object.create(Object.getPrototypeOf(initialObject));
const handler = {
deleteProperty(target, prop) {
const prevValue = Reflect.get(target, prop);
removePropListener(prop);
const deleted = Reflect.deleteProperty(target, prop);
if (deleted) {
notifyUpdate(["delete", [prop], prevValue]);
}
return deleted;
},
set(target, prop, value, receiver) {
const hasPrevValue = Reflect.has(target, prop);
const prevValue = Reflect.get(target, prop, receiver);
if (hasPrevValue && (objectIs(prevValue, value) || proxyCache.has(value) && objectIs(prevValue, proxyCache.get(value)))) {
return true;
}
removePropListener(prop);
if (isObject$6(value)) {
value = y$7(value) || value;
}
let nextValue = value;
if (value instanceof Promise) {
value.then((v2) => {
value.status = "fulfilled";
value.value = v2;
notifyUpdate(["resolve", [prop], v2]);
}).catch((e2) => {
value.status = "rejected";
value.reason = e2;
notifyUpdate(["reject", [prop], e2]);
});
} else {
if (!proxyStateMap.has(value) && canProxy(value)) {
nextValue = proxyFunction(value);
}
const childProxyState = !refSet.has(nextValue) && proxyStateMap.get(nextValue);
if (childProxyState) {
addPropListener(prop, childProxyState);
}
}
Reflect.set(target, prop, nextValue, receiver);
notifyUpdate(["set", [prop], value, prevValue]);
return true;
}
};
const proxyObject = newProxy(baseObject, handler);
proxyCache.set(initialObject, proxyObject);
const proxyState = [
baseObject,
ensureVersion,
createSnapshot,
addListener
];
proxyStateMap.set(proxyObject, proxyState);
Reflect.ownKeys(initialObject).forEach((key) => {
const desc = Object.getOwnPropertyDescriptor(
initialObject,
key
);
if ("value" in desc) {
proxyObject[key] = initialObject[key];
delete desc.value;
delete desc.writable;
}
Object.defineProperty(baseObject, key, desc);
});
return proxyObject;
}) => [
// public functions
proxyFunction,
// shared state
proxyStateMap,
refSet,
// internal things
objectIs,
newProxy,
canProxy,
defaultHandlePromise,
snapCache,
createSnapshot,
proxyCache,
versionHolder
];
const [defaultProxyFunction] = buildProxyFunction();
function proxy(initialObject = {}) {
return defaultProxyFunction(initialObject);
}
function subscribe(proxyObject, callback, notifyInSync) {
const proxyState = proxyStateMap.get(proxyObject);
if (({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production" && !proxyState) {
console.warn("Please use proxy object");
}
let promise;
const ops = [];
const addListener = proxyState[3];
let isListenerActive = false;
const listener = (op) => {
ops.push(op);
if (notifyInSync) {
callback(ops.splice(0));
return;
}
if (!promise) {
promise = Promise.resolve().then(() => {
promise = void 0;
if (isListenerActive) {
callback(ops.splice(0));
}
});
}
};
const removeListener = addListener(listener);
isListenerActive = true;
return () => {
isListenerActive = false;
removeListener();
};
}
function snapshot(proxyObject, handlePromise) {
const proxyState = proxyStateMap.get(proxyObject);
if (({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production" && !proxyState) {
console.warn("Please use proxy object");
}
const [target, ensureVersion, createSnapshot] = proxyState;
return createSnapshot(target, ensureVersion(), handlePromise);
}
var shimExports = {};
var shim = {
get exports() {
return shimExports;
},
set exports(v2) {
shimExports = v2;
}
};
var useSyncExternalStoreShim_production_min = {};
/**
* @license React
* use-sync-external-store-shim.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var e$2 = React$1;
function h$7(a2, b2) {
return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2;
}
var k$4 = "function" === typeof Object.is ? Object.is : h$7, l$6 = e$2.useState, m$6 = e$2.useEffect, n$4 = e$2.useLayoutEffect, p$5 = e$2.useDebugValue;
function q$3(a2, b2) {
var d2 = b2(), f2 = l$6({ inst: { value: d2, getSnapshot: b2 } }), c2 = f2[0].inst, g2 = f2[1];
n$4(function() {
c2.value = d2;
c2.getSnapshot = b2;
r$5(c2) && g2({ inst: c2 });
}, [a2, d2, b2]);
m$6(function() {
r$5(c2) && g2({ inst: c2 });
return a2(function() {
r$5(c2) && g2({ inst: c2 });
});
}, [a2]);
p$5(d2);
return d2;
}
function r$5(a2) {
var b2 = a2.getSnapshot;
a2 = a2.value;
try {
var d2 = b2();
return !k$4(a2, d2);
} catch (f2) {
return true;
}
}
function t$2(a2, b2) {
return b2();
}
var u$5 = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? t$2 : q$3;
useSyncExternalStoreShim_production_min.useSyncExternalStore = void 0 !== e$2.useSyncExternalStore ? e$2.useSyncExternalStore : u$5;
(function(module) {
{
module.exports = useSyncExternalStoreShim_production_min;
}
})(shim);
const useSyncExternalStoreExports = /* @__PURE__ */ getDefaultExportFromCjs(shimExports);
const { use } = React$1;
const { useSyncExternalStore } = useSyncExternalStoreExports;
const useAffectedDebugValue = (state, affected) => {
const pathList = React$1.useRef();
React$1.useEffect(() => {
pathList.current = w$4(state, affected, true);
});
React$1.useDebugValue(pathList.current);
};
const targetCache = /* @__PURE__ */ new WeakMap();
function useSnapshot(proxyObject, options) {
const notifyInSync = options == null ? void 0 : options.sync;
const lastSnapshot = React$1.useRef();
const lastAffected = React$1.useRef();
let inRender = true;
const currSnapshot = useSyncExternalStore(
React$1.useCallback(
(callback) => {
const unsub = subscribe(proxyObject, callback, notifyInSync);
callback();
return unsub;
},
[proxyObject, notifyInSync]
),
() => {
const nextSnapshot = snapshot(proxyObject, use);
try {
if (!inRender && lastSnapshot.current && lastAffected.current && !p$6(
lastSnapshot.current,
nextSnapshot,
lastAffected.current,
/* @__PURE__ */ new WeakMap()
)) {
return lastSnapshot.current;
}
} catch (e2) {
}
return nextSnapshot;
},
() => snapshot(proxyObject, use)
);
inRender = false;
const currAffected = /* @__PURE__ */ new WeakMap();
React$1.useEffect(() => {
lastSnapshot.current = currSnapshot;
lastAffected.current = currAffected;
});
if (({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production") {
useAffectedDebugValue(currSnapshot, currAffected);
}
const proxyCache = React$1.useMemo(() => /* @__PURE__ */ new WeakMap(), []);
return a$2(
currSnapshot,
currAffected,
proxyCache,
targetCache
);
}
const DEVTOOLS = Symbol();
function devtools(proxyObject, options) {
if (typeof options === "string") {
console.warn(
"string name option is deprecated, use { name }. https://github.com/pmndrs/valtio/pull/400"
);
options = { name: options };
}
const { enabled, name = "" } = options || {};
let extension;
try {
extension = (enabled != null ? enabled : ({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production") && window.__REDUX_DEVTOOLS_EXTENSION__;
} catch {
}
if (!extension) {
if (({ "BASE_URL": "/", "MODE": "production", "DEV": false, "PROD": true, "SSR": false } && "production") !== "production" && enabled) {
console.warn("[Warning] Please install/enable Redux devtools extension");
}
return;
}
let isTimeTraveling = false;
const devtools2 = extension.connect({ name });
const unsub1 = subscribe(proxyObject, (ops) => {
const action = ops.filter(([_2, path]) => path[0] !== DEVTOOLS).map(([op, path]) => `${op}:${path.map(String).join(".")}`).join(", ");
if (!action) {
return;
}
if (isTimeTraveling) {
isTimeTraveling = false;
} else {
const snapWithoutDevtools = Object.assign({}, snapshot(proxyObject));
delete snapWithoutDevtools[DEVTOOLS];
devtools2.send(
{
type: action,
updatedAt: (/* @__PURE__ */ new Date()).toLocaleString()
},
snapWithoutDevtools
);
}
});
const unsub2 = devtools2.subscribe((message) => {
var _a2, _b2, _c2, _d, _e2, _f;
if (message.type === "ACTION" && message.payload) {
try {
Object.assign(proxyObject, JSON.parse(message.payload));
} catch (e2) {
console.error(
"please dispatch a serializable value that JSON.parse() and proxy() support\n",
e2
);
}
}
if (message.type === "DISPATCH" && message.state) {
if (((_a2 = message.payload) == null ? void 0 : _a2.type) === "JUMP_TO_ACTION" || ((_b2 = message.payload) == null ? void 0 : _b2.type) === "JUMP_TO_STATE") {
isTimeTraveling = true;
const state = JSON.parse(message.state);
Object.assign(proxyObject, state);
}
proxyObject[DEVTOOLS] = message;
} else if (message.type === "DISPATCH" && ((_c2 = message.payload) == null ? void 0 : _c2.type) === "COMMIT") {
devtools2.init(snapshot(proxyObject));
} else if (message.type === "DISPATCH" && ((_d = message.payload) == null ? void 0 : _d.type) === "IMPORT_STATE") {
const actions = (_e2 = message.payload.nextLiftedState) == null ? void 0 : _e2.actionsById;
const computedStates = ((_f = message.payload.nextLiftedState) == null ? void 0 : _f.computedStates) || [];
isTimeTraveling = true;
computedStates.forEach(({ state }, index2) => {
const action = actions[index2] || "No action found";
Object.assign(proxyObject, state);
if (index2 === 0) {
devtools2.init(snapshot(proxyObject));
} else {
devtools2.send(action, snapshot(proxyObject));
}
});
}
});
devtools2.init(snapshot(proxyObject));
return () => {
unsub1();
unsub2 == null ? void 0 : unsub2();
};
}
function scrollDown() {
setTimeout(() => {
var _a2;
(_a2 = document.querySelector("#container-messages")) == null ? void 0 : _a2.scrollBy(0, 1e3);
}, 10);
}
class Logger {
constructor(maxSize = 100, shiftOffset = 10) {
__publicField(this, "maxSize");
__publicField(this, "shiftOffset");
this.maxSize = maxSize;
this.shiftOffset = shiftOffset;
}
get logs() {
return store.logs;
}
addLog(log2) {
store.logs.push(log2);
if (store.userSettings.autoScrollDown) {
scrollDown();
}
}
log(option) {
this.addLog({
...option,
// timestamp: dayjs().toISOString(),
timestamp: new Date().toISOString(),
id: `${Math.random()}`
});
}
info(content) {
return this.log({ type: "info", content });
}
question(content) {
return this.log({ type: "question", content });
}
error(content) {
return this.log({ type: "error", content });
}
hr() {
return this.log({ type: "hr", content: "" });
}
debug(...content) {
console.log(`[eocs-helper]`, ...content);
}
}
const logger = new Logger();
var monkeyWindow = window;
var GM_setValue = /* @__PURE__ */ (() => monkeyWindow.GM_setValue)();
var GM_xmlhttpRequest = /* @__PURE__ */ (() => monkeyWindow.GM_xmlhttpRequest)();
var GM_getValue = /* @__PURE__ */ (() => monkeyWindow.GM_getValue)();
var freeGlobal$3 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
var _freeGlobal = freeGlobal$3;
var freeGlobal$2 = _freeGlobal;
var freeSelf$1 = typeof self == "object" && self && self.Object === Object && self;
var root$b = freeGlobal$2 || freeSelf$1 || Function("return this")();
var _root = root$b;
var root$a = _root;
var Symbol$6 = root$a.Symbol;
var _Symbol = Symbol$6;
var Symbol$5 = _Symbol;
var objectProto$5 = Object.prototype;
var hasOwnProperty$3 = objectProto$5.hasOwnProperty;
var nativeObjectToString$3 = objectProto$5.toString;
var symToStringTag$3 = Symbol$5 ? Symbol$5.toStringTag : void 0;
function getRawTag$2(value) {
var isOwn = hasOwnProperty$3.call(value, symToStringTag$3), tag = value[symToStringTag$3];
try {
value[symToStringTag$3] = void 0;
var unmasked = true;
} catch (e2) {
}
var result = nativeObjectToString$3.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag$3] = tag;
} else {
delete value[symToStringTag$3];
}
}
return result;
}
var _getRawTag = getRawTag$2;
var objectProto$4 = Object.prototype;
var nativeObjectToString$2 = objectProto$4.toString;
function objectToString$2(value) {
return nativeObjectToString$2.call(value);
}
var _objectToString = objectToString$2;
var Symbol$4 = _Symbol, getRawTag$1 = _getRawTag, objectToString$1 = _objectToString;
var nullTag$1 = "[object Null]", undefinedTag$1 = "[object Undefined]";
var symToStringTag$2 = Symbol$4 ? Symbol$4.toStringTag : void 0;
function baseGetTag$5(value) {
if (value == null) {
return value === void 0 ? undefinedTag$1 : nullTag$1;
}
return symToStringTag$2 && symToStringTag$2 in Object(value) ? getRawTag$1(value) : objectToString$1(value);
}
var _baseGetTag = baseGetTag$5;
function isObject$5(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var isObject_1 = isObject$5;
var baseGetTag$4 = _baseGetTag, isObject$4 = isObject_1;
var asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
function isFunction$3(value) {
if (!isObject$4(value)) {
return false;
}
var tag = baseGetTag$4(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
var isFunction_1 = isFunction$3;
var root$9 = _root;
var coreJsData$1 = root$9["__core-js_shared__"];
var _coreJsData = coreJsData$1;
var coreJsData = _coreJsData;
var maskSrcKey = function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
}();
function isMasked$1(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var _isMasked = isMasked$1;
var funcProto$1 = Function.prototype;
var funcToString$1 = funcProto$1.toString;
function toSource$2(func) {
if (func != null) {
try {
return funcToString$1.call(func);
} catch (e2) {
}
try {
return func + "";
} catch (e2) {
}
}
return "";
}
var _toSource = toSource$2;
var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$3 = isObject_1, toSource$1 = _toSource;
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
var reIsHostCtor = /^\[object .+?Constructor\]$/;
var funcProto = Function.prototype, objectProto$3 = Object.prototype;
var funcToString = funcProto.toString;
var hasOwnProperty$2 = objectProto$3.hasOwnProperty;
var reIsNative = RegExp(
"^" + funcToString.call(hasOwnProperty$2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
);
function baseIsNative$1(value) {
if (!isObject$3(value) || isMasked(value)) {
return false;
}
var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource$1(value));
}
var _baseIsNative = baseIsNative$1;
function getValue$2(object, key) {
return object == null ? void 0 : object[key];
}
var _getValue = getValue$2;
var baseIsNative = _baseIsNative, getValue$1 = _getValue;
function getNative$6(object, key) {
var value = getValue$1(object, key);
return baseIsNative(value) ? value : void 0;
}
var _getNative = getNative$6;
var getNative$5 = _getNative, root$8 = _root;
var Map$2 = getNative$5(root$8, "Map");
var _Map = Map$2;
var getNative$4 = _getNative;
getNative$4(Object, "create");
var root$7 = _root;
root$7.Uint8Array;
var Symbol$3 = _Symbol;
var symbolProto = Symbol$3 ? Symbol$3.prototype : void 0;
symbolProto ? symbolProto.valueOf : void 0;
function isObjectLike$4(value) {
return value != null && typeof value == "object";
}
var isObjectLike_1 = isObjectLike$4;
var baseGetTag$3 = _baseGetTag, isObjectLike$3 = isObjectLike_1;
var argsTag = "[object Arguments]";
function baseIsArguments$1(value) {
return isObjectLike$3(value) && baseGetTag$3(value) == argsTag;
}
var _baseIsArguments = baseIsArguments$1;
var baseIsArguments = _baseIsArguments, isObjectLike$2 = isObjectLike_1;
var objectProto$2 = Object.prototype;
var hasOwnProperty$1 = objectProto$2.hasOwnProperty;
var propertyIsEnumerable = objectProto$2.propertyIsEnumerable;
baseIsArguments(function() {
return arguments;
}()) ? baseIsArguments : function(value) {
return isObjectLike$2(value) && hasOwnProperty$1.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
};
var isBufferExports = {};
var isBuffer = {
get exports() {
return isBufferExports;
},
set exports(v2) {
isBufferExports = v2;
}
};
function stubFalse() {
return false;
}
var stubFalse_1 = stubFalse;
(function(module, exports) {
var root2 = _root, stubFalse2 = stubFalse_1;
var freeExports = exports && !exports.nodeType && exports;
var freeModule = freeExports && true && module && !module.nodeType && module;
var moduleExports = freeModule && freeModule.exports === freeExports;
var Buffer2 = moduleExports ? root2.Buffer : void 0;
var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
var isBuffer2 = nativeIsBuffer || stubFalse2;
module.exports = isBuffer2;
})(isBuffer, isBufferExports);
var _nodeUtilExports = {};
var _nodeUtil = {
get exports() {
return _nodeUtilExports;
},
set exports(v2) {
_nodeUtilExports = v2;
}
};
(function(module, exports) {
var freeGlobal2 = _freeGlobal;
var freeExports = exports && !exports.nodeType && exports;
var freeModule = freeExports && true && module && !module.nodeType && module;
var moduleExports = freeModule && freeModule.exports === freeExports;
var freeProcess = moduleExports && freeGlobal2.process;
var nodeUtil2 = function() {
try {
var types = freeModule && freeModule.require && freeModule.require("util").types;
if (types) {
return types;
}
return freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch (e2) {
}
}();
module.exports = nodeUtil2;
})(_nodeUtil, _nodeUtilExports);
var nodeUtil = _nodeUtilExports;
nodeUtil && nodeUtil.isTypedArray;
var getNative$3 = _getNative, root$6 = _root;
var DataView$1 = getNative$3(root$6, "DataView");
var _DataView = DataView$1;
var getNative$2 = _getNative, root$5 = _root;
var Promise$2 = getNative$2(root$5, "Promise");
var _Promise = Promise$2;
var getNative$1 = _getNative, root$4 = _root;
var Set$2 = getNative$1(root$4, "Set");
var _Set = Set$2;
var getNative = _getNative, root$3 = _root;
var WeakMap$2 = getNative(root$3, "WeakMap");
var _WeakMap = WeakMap$2;
var DataView = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set$1 = _Set, WeakMap$1 = _WeakMap, baseGetTag$2 = _baseGetTag, toSource = _toSource;
var mapTag = "[object Map]", objectTag = "[object Object]", promiseTag = "[object Promise]", setTag = "[object Set]", weakMapTag = "[object WeakMap]";
var dataViewTag = "[object DataView]";
var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1);
var getTag = baseGetTag$2;
if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map$1 && getTag(new Map$1()) != mapTag || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag) {
getTag = function(value) {
var result = baseGetTag$2(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
if (ctorString) {
switch (ctorString) {
case dataViewCtorString:
return dataViewTag;
case mapCtorString:
return mapTag;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag;
case weakMapCtorString:
return weakMapTag;
}
}
return result;
};
}
function injectJs(source) {
const parent = document;
const scriptElement = parent.createElement("script");
scriptElement.setAttribute("type", "text/javascript");
scriptElement.src = source;
scriptElement.className = "injected-js";
parent.documentElement.appendChild(scriptElement);
return scriptElement;
}
injectJs(chrome.runtime.getURL("index.js"));
const EXTENSION_NAME = "eocs-helper";
const sessions = /* @__PURE__ */ new Map();
async function fromContentToInject(messageEvent) {
const message = messageEvent.data;
if (!message.extensionName || message.extensionName !== EXTENSION_NAME) {
return;
}
if (!(message.sessionSource === "content" && message.sessionTarget === "inject")) {
return;
}
const callback = sessions.get(message.sessionId);
try {
callback && await callback(message);
} catch (error) {
console.error(error);
} finally {
sessions.delete(message.sessionId);
}
}
window.addEventListener("message", fromContentToInject, false);
async function setValue(key, value) {
{
await GM_setValue(key, JSON.stringify(value));
}
}
async function getValue(key, defaultValue) {
let returnValue = void 0;
{
const temp = await GM_getValue(key, defaultValue);
try {
returnValue = JSON.parse(temp);
} catch (error) {
returnValue = temp;
}
}
return returnValue;
}
class Store {
constructor() {
__publicField(this, "visibility", {
log: true,
config: false,
floating: false
});
__publicField(this, "position", {
floating: {
x: 0,
y: 0
},
log: {
x: 0,
y: 0
}
});
__publicField(this, "tabIndex", 0);
__publicField(this, "userSettings", {});
__publicField(this, "sectionSettings", []);
__publicField(this, "logs", []);
}
setVisibility(key, value) {
this.visibility[key] = value;
}
setPosition(key, value) {
this.position[key] = value;
}
setTabIndex(index2) {
this.tabIndex = index2;
}
/** 因为subscribe了这个key,如果直接替换(=),会导致subscribe失效 */
setUserSettings(userSettings) {
for (const [key, value] of Object.entries(userSettings)) {
this.userSettings[key] = value;
}
}
/**
* 通过集成了所有插件设置的设置中心,设置USER_SETTINGS的默认值
*/
setDefaultValues() {
for (const section of this.sectionSettings) {
for (const generic of section.settings) {
if (this.userSettings[generic.id] === void 0) {
this.userSettings[generic.id] = generic.default;
}
}
}
}
/** 恢复默认值 */
resetDefaultValues() {
for (const section of this.sectionSettings) {
for (const generic of section.settings) {
this.userSettings[generic.id] = generic.default;
}
}
}
clearLogs() {
this.logs = [];
}
}
const store = proxy(new Store());
const useStore = () => useSnapshot(store);
devtools(store, {
name: "store"
});
subscribe(store.userSettings, async () => {
await setValue("userSettings", store.userSettings);
logger.debug("userSettings已持久化");
});
const CONSTANT = {
QUERY_INTERVAL: 2e3,
DEBUG_MODE: false
};
const apiServer = "http://47.100.166.53/api";
const homepage = "https://www.github.com/SSmJaE/";
const projects = {
welearn: {
title: "随行课堂网课助手",
name: "WELearn网课助手",
version: "1.0.0",
matches: [
"*://course.sflep.com/*",
"*://welearn.sflep.com/*",
"*://courseappserver.sflep.com/*",
"*://centercourseware.sflep.com/*"
],
namespace: "https://github.com/SSmJaE/WELearnHelper",
description: "显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;开放自定义设置",
connect: [
"localhost",
"47.100.166.53"
]
},
tsinghua: {
title: "清华社网课助手",
name: "TsinghuaELTHelper",
version: "0.1.0",
matches: [],
namespace: "https://github.com/SSmJaE/TsinghuaELTHelper",
description: "显示清华社网课题目答案",
connect: [
"localhost",
"47.100.166.53"
]
}
};
const metadata = {
apiServer,
homepage,
projects
};
function errorMessageFactory(error, message = "请求异常,稍后再试", mode = "message") {
let toDisplay = "";
switch (mode) {
case "message":
toDisplay += message;
break;
case "originError":
toDisplay += `${error.message}`;
break;
case "both":
toDisplay += message + ` ${error.message}`;
break;
}
logger.error(`${toDisplay}`);
}
function requestErrorHandler(message = "请求异常,稍后再试", mode = "message") {
return function(target, propertyKey, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
const result = originalMethod.apply(this, args);
result.catch((error) => {
errorMessageFactory(error, message, mode);
});
return result;
};
return descriptor;
};
}
function perSession(storageKey) {
return function(target, propertyKey, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
const hasChecked = sessionStorage.getItem(storageKey);
if (!hasChecked) {
const result = originalMethod.apply(this, args);
logger.debug(`${storageKey}未执行过,开始执行`);
sessionStorage.setItem(storageKey, new Date().toISOString());
return result;
} else {
logger.debug(`${storageKey}已执行过,放弃执行`);
return Promise.resolve();
}
};
return descriptor;
};
}
const token$1 = "%[a-f0-9]{2}";
const singleMatcher = new RegExp("(" + token$1 + ")|([^%]+?)", "gi");
const multiMatcher = new RegExp("(" + token$1 + ")+", "gi");
function decodeComponents(components, split) {
try {
return [decodeURIComponent(components.join(""))];
} catch {
}
if (components.length === 1) {
return components;
}
split = split || 1;
const left = components.slice(0, split);
const right = components.slice(split);
return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));
}
function decode$1(input) {
try {
return decodeURIComponent(input);
} catch {
let tokens = input.match(singleMatcher) || [];
for (let i2 = 1; i2 < tokens.length; i2++) {
input = decodeComponents(tokens, i2).join("");
tokens = input.match(singleMatcher) || [];
}
return input;
}
}
function customDecodeURIComponent(input) {
const replaceMap = {
"%FE%FF": "��",
"%FF%FE": "��"
};
let match2 = multiMatcher.exec(input);
while (match2) {
try {
replaceMap[match2[0]] = decodeURIComponent(match2[0]);
} catch {
const result = decode$1(match2[0]);
if (result !== match2[0]) {
replaceMap[match2[0]] = result;
}
}
match2 = multiMatcher.exec(input);
}
replaceMap["%C2"] = "�";
const entries = Object.keys(replaceMap);
for (const key of entries) {
input = input.replace(new RegExp(key, "g"), replaceMap[key]);
}
return input;
}
function decodeUriComponent(encodedURI) {
if (typeof encodedURI !== "string") {
throw new TypeError("Expected `encodedURI` to be of type `string`, got `" + typeof encodedURI + "`");
}
try {
return decodeURIComponent(encodedURI);
} catch {
return customDecodeURIComponent(encodedURI);
}
}
function splitOnFirst(string, separator) {
if (!(typeof string === "string" && typeof separator === "string")) {
throw new TypeError("Expected the arguments to be of type `string`");
}
if (string === "" || separator === "") {
return [];
}
const separatorIndex = string.indexOf(separator);
if (separatorIndex === -1) {
return [];
}
return [
string.slice(0, separatorIndex),
string.slice(separatorIndex + separator.length)
];
}
function includeKeys(object, predicate) {
const result = {};
if (Array.isArray(predicate)) {
for (const key of predicate) {
const descriptor = Object.getOwnPropertyDescriptor(object, key);
if (descriptor == null ? void 0 : descriptor.enumerable) {
Object.defineProperty(result, key, descriptor);
}
}
} else {
for (const key of Reflect.ownKeys(object)) {
const descriptor = Object.getOwnPropertyDescriptor(object, key);
if (descriptor.enumerable) {
const value = object[key];
if (predicate(key, value, object)) {
Object.defineProperty(result, key, descriptor);
}
}
}
}
return result;
}
const isNullOrUndefined = (value) => value === null || value === void 0;
const strictUriEncode = (string) => encodeURIComponent(string).replace(/[!'()*]/g, (x2) => `%${x2.charCodeAt(0).toString(16).toUpperCase()}`);
const encodeFragmentIdentifier = Symbol("encodeFragmentIdentifier");
function encoderForArrayFormat(options) {
switch (options.arrayFormat) {
case "index": {
return (key) => (result, value) => {
const index2 = result.length;
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [
...result,
[encode(key, options), "[", index2, "]"].join("")
];
}
return [
...result,
[encode(key, options), "[", encode(index2, options), "]=", encode(value, options)].join("")
];
};
}
case "bracket": {
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [
...result,
[encode(key, options), "[]"].join("")
];
}
return [
...result,
[encode(key, options), "[]=", encode(value, options)].join("")
];
};
}
case "colon-list-separator": {
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [
...result,
[encode(key, options), ":list="].join("")
];
}
return [
...result,
[encode(key, options), ":list=", encode(value, options)].join("")
];
};
}
case "comma":
case "separator":
case "bracket-separator": {
const keyValueSep = options.arrayFormat === "bracket-separator" ? "[]=" : "=";
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
value = value === null ? "" : value;
if (result.length === 0) {
return [[encode(key, options), keyValueSep, encode(value, options)].join("")];
}
return [[result, encode(value, options)].join(options.arrayFormatSeparator)];
};
}
default: {
return (key) => (result, value) => {
if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") {
return result;
}
if (value === null) {
return [
...result,
encode(key, options)
];
}
return [
...result,
[encode(key, options), "=", encode(value, options)].join("")
];
};
}
}
}
function parserForArrayFormat(options) {
let result;
switch (options.arrayFormat) {
case "index": {
return (key, value, accumulator) => {
result = /\[(\d*)]$/.exec(key);
key = key.replace(/\[\d*]$/, "");
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === void 0) {
accumulator[key] = {};
}
accumulator[key][result[1]] = value;
};
}
case "bracket": {
return (key, value, accumulator) => {
result = /(\[])$/.exec(key);
key = key.replace(/\[]$/, "");
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === void 0) {
accumulator[key] = [value];
return;
}
accumulator[key] = [...accumulator[key], value];
};
}
case "colon-list-separator": {
return (key, value, accumulator) => {
result = /(:list)$/.exec(key);
key = key.replace(/:list$/, "");
if (!result) {
accumulator[key] = value;
return;
}
if (accumulator[key] === void 0) {
accumulator[key] = [value];
return;
}
accumulator[key] = [...accumulator[key], value];
};
}
case "comma":
case "separator": {
return (key, value, accumulator) => {
const isArray2 = typeof value === "string" && value.includes(options.arrayFormatSeparator);
const isEncodedArray = typeof value === "string" && !isArray2 && decode(value, options).includes(options.arrayFormatSeparator);
value = isEncodedArray ? decode(value, options) : value;
const newValue = isArray2 || isEncodedArray ? value.split(options.arrayFormatSeparator).map((item) => decode(item, options)) : value === null ? value : decode(value, options);
accumulator[key] = newValue;
};
}
case "bracket-separator": {
return (key, value, accumulator) => {
const isArray2 = /(\[])$/.test(key);
key = key.replace(/\[]$/, "");
if (!isArray2) {
accumulator[key] = value ? decode(value, options) : value;
return;
}
const arrayValue = value === null ? [] : value.split(options.arrayFormatSeparator).map((item) => decode(item, options));
if (accumulator[key] === void 0) {
accumulator[key] = arrayValue;
return;
}
accumulator[key] = [...accumulator[key], ...arrayValue];
};
}
default: {
return (key, value, accumulator) => {
if (accumulator[key] === void 0) {
accumulator[key] = value;
return;
}
accumulator[key] = [...[accumulator[key]].flat(), value];
};
}
}
}
function validateArrayFormatSeparator(value) {
if (typeof value !== "string" || value.length !== 1) {
throw new TypeError("arrayFormatSeparator must be single character string");
}
}
function encode(value, options) {
if (options.encode) {
return options.strict ? strictUriEncode(value) : encodeURIComponent(value);
}
return value;
}
function decode(value, options) {
if (options.decode) {
return decodeUriComponent(value);
}
return value;
}
function keysSorter(input) {
if (Array.isArray(input)) {
return input.sort();
}
if (typeof input === "object") {
return keysSorter(Object.keys(input)).sort((a2, b2) => Number(a2) - Number(b2)).map((key) => input[key]);
}
return input;
}
function removeHash(input) {
const hashStart = input.indexOf("#");
if (hashStart !== -1) {
input = input.slice(0, hashStart);
}
return input;
}
function getHash(url) {
let hash2 = "";
const hashStart = url.indexOf("#");
if (hashStart !== -1) {
hash2 = url.slice(hashStart);
}
return hash2;
}
function parseValue(value, options) {
if (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === "string" && value.trim() !== "")) {
value = Number(value);
} else if (options.parseBooleans && value !== null && (value.toLowerCase() === "true" || value.toLowerCase() === "false")) {
value = value.toLowerCase() === "true";
}
return value;
}
function extract(input) {
input = removeHash(input);
const queryStart = input.indexOf("?");
if (queryStart === -1) {
return "";
}
return input.slice(queryStart + 1);
}
function parse$1(query, options) {
options = {
decode: true,
sort: true,
arrayFormat: "none",
arrayFormatSeparator: ",",
parseNumbers: false,
parseBooleans: false,
...options
};
validateArrayFormatSeparator(options.arrayFormatSeparator);
const formatter = parserForArrayFormat(options);
const returnValue = /* @__PURE__ */ Object.create(null);
if (typeof query !== "string") {
return returnValue;
}
query = query.trim().replace(/^[?#&]/, "");
if (!query) {
return returnValue;
}
for (const parameter of query.split("&")) {
if (parameter === "") {
continue;
}
const parameter_ = options.decode ? parameter.replace(/\+/g, " ") : parameter;
let [key, value] = splitOnFirst(parameter_, "=");
if (key === void 0) {
key = parameter_;
}
value = value === void 0 ? null : ["comma", "separator", "bracket-separator"].includes(options.arrayFormat) ? value : decode(value, options);
formatter(decode(key, options), value, returnValue);
}
for (const [key, value] of Object.entries(returnValue)) {
if (typeof value === "object" && value !== null) {
for (const [key2, value2] of Object.entries(value)) {
value[key2] = parseValue(value2, options);
}
} else {
returnValue[key] = parseValue(value, options);
}
}
if (options.sort === false) {
return returnValue;
}
return (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce((result, key) => {
const value = returnValue[key];
if (Boolean(value) && typeof value === "object" && !Array.isArray(value)) {
result[key] = keysSorter(value);
} else {
result[key] = value;
}
return result;
}, /* @__PURE__ */ Object.create(null));
}
function stringify$1(object, options) {
if (!object) {
return "";
}
options = {
encode: true,
strict: true,
arrayFormat: "none",
arrayFormatSeparator: ",",
...options
};
validateArrayFormatSeparator(options.arrayFormatSeparator);
const shouldFilter = (key) => options.skipNull && isNullOrUndefined(object[key]) || options.skipEmptyString && object[key] === "";
const formatter = encoderForArrayFormat(options);
const objectCopy = {};
for (const [key, value] of Object.entries(object)) {
if (!shouldFilter(key)) {
objectCopy[key] = value;
}
}
const keys = Object.keys(objectCopy);
if (options.sort !== false) {
keys.sort(options.sort);
}
return keys.map((key) => {
const value = object[key];
if (value === void 0) {
return "";
}
if (value === null) {
return encode(key, options);
}
if (Array.isArray(value)) {
if (value.length === 0 && options.arrayFormat === "bracket-separator") {
return encode(key, options) + "[]";
}
return value.reduce(formatter(key), []).join("&");
}
return encode(key, options) + "=" + encode(value, options);
}).filter((x2) => x2.length > 0).join("&");
}
function parseUrl(url, options) {
var _a2;
options = {
decode: true,
...options
};
let [url_, hash2] = splitOnFirst(url, "#");
if (url_ === void 0) {
url_ = url;
}
return {
url: ((_a2 = url_ == null ? void 0 : url_.split("?")) == null ? void 0 : _a2[0]) ?? "",
query: parse$1(extract(url), options),
...options && options.parseFragmentIdentifier && hash2 ? { fragmentIdentifier: decode(hash2, options) } : {}
};
}
function stringifyUrl(object, options) {
options = {
encode: true,
strict: true,
[encodeFragmentIdentifier]: true,
...options
};
const url = removeHash(object.url).split("?")[0] || "";
const queryFromUrl = extract(object.url);
const query = {
...parse$1(queryFromUrl, { sort: false }),
...object.query
};
let queryString2 = stringify$1(query, options);
if (queryString2) {
queryString2 = `?${queryString2}`;
}
let hash2 = getHash(object.url);
if (object.fragmentIdentifier) {
const urlObjectForFragmentEncode = new URL(url);
urlObjectForFragmentEncode.hash = object.fragmentIdentifier;
hash2 = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`;
}
return `${url}${queryString2}${hash2}`;
}
function pick(input, filter, options) {
options = {
parseFragmentIdentifier: true,
[encodeFragmentIdentifier]: false,
...options
};
const { url, query, fragmentIdentifier } = parseUrl(input, options);
return stringifyUrl({
url,
query: includeKeys(query, filter),
fragmentIdentifier
}, options);
}
function exclude(input, filter, options) {
const exclusionFilter = Array.isArray(filter) ? (key) => !filter.includes(key) : (key, value) => !filter(key, value);
return pick(input, exclusionFilter, options);
}
const queryString = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
exclude,
extract,
parse: parse$1,
parseUrl,
pick,
stringify: stringify$1,
stringifyUrl
}, Symbol.toStringTag, { value: "Module" }));
function getFullUrl(url, query) {
for (const [, value] of Object.entries(query || {})) {
if (typeof value === "object")
throw new Error("query params不应为嵌套对象,拍平或者手动序列化子对象");
}
return queryString.stringifyUrl({
url: url.startsWith("/") ? `${metadata.apiServer}/${"welearn"}` : url,
query
});
}
function requestForUserscript(url, { method, headers, body, query } = {
method: "GET",
headers: {},
body: void 0,
query: void 0
}) {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
url: getFullUrl(url, query),
method,
headers,
data: typeof body === "object" ? JSON.stringify(body) : body,
timeout: 5e3,
responseType: "json",
// @ts-ignore
onload(response) {
const { status: statusCode } = response;
if (statusCode >= 200 && statusCode <= 300) {
resolve({
text: () => new Promise((resolve2) => resolve2(response.responseText)),
json: () => new Promise((resolve2) => resolve2(response.response))
});
} else {
reject(response);
}
},
// @ts-ignore
onabort: (response) => reject(response),
// @ts-ignore
onerror: (response) => reject(response),
// @ts-ignore
ontimeout: (response) => reject(response)
});
});
}
const implement = requestForUserscript;
class Request extends Function {
constructor() {
super("...args", "return this.__self__.__call__(...args)");
__publicField(this, "__self__");
const self2 = this.bind(this);
this.__self__ = self2;
return self2;
}
__call__(url, init = { method: "GET" }) {
return implement(url, init);
}
post(url, init = {}) {
return implement(url, { ...init, method: "POST" });
}
delete(url, init = {}) {
return implement(url, { ...init, method: "DELETE" });
}
put(url, init = {}) {
return implement(url, { ...init, method: "PUT" });
}
patch(url, init = {}) {
return implement(url, { ...init, method: "PATCH" });
}
get(url, init = {}) {
return implement(url, { ...init, method: "GET" });
}
head(url, init = {}) {
return implement(url, { ...init, method: "HEAD" });
}
options(url, init = {}) {
return implement(url, { ...init, method: "OPTIONS" });
}
}
const request = new Request();
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __decorateClass = (decorators, target, key, kind) => {
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
for (var i2 = decorators.length - 1, decorator; i2 >= 0; i2--)
if (decorator = decorators[i2])
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
if (kind && result)
__defProp2(target, key, result);
return result;
};
class WELearnAPI {
static async checkVersion() {
const response = await request.post("/version/", {
body: {
version: metadata.projects.welearn.version
}
});
const returnJson = await response.json();
if (returnJson.status === false) {
throw new Error(returnJson.error);
} else {
for (const message of returnJson.data) {
logger.info(message);
}
}
}
static async queryByTaskId(taskId, isSchoolTest) {
const response = await request.post("/query/", {
body: {
queryType: 0,
taskId,
isSchoolTest
}
});
return await response.json();
}
static async queryByQuestionId(questionId) {
const response = await request.post("/query/", {
body: {
queryType: 1,
questionId
}
});
const returnJson = await response.json();
if (returnJson.status === false) {
throw new Error(returnJson.error);
} else {
return returnJson.data;
}
}
static async queryByDomString(domString) {
const response = await request.post("/query/", {
body: {
queryType: 2,
domString
}
});
const returnJson = await response.json();
if (returnJson.status === false) {
throw new Error(returnJson.error);
} else {
return returnJson.data;
}
}
static async collectAll(taskId, domString, isSchoolTest) {
const response = await request.post("/collect/", {
body: {
taskId,
domString,
isSchoolTest
}
});
const returnJson = await response.json();
if (returnJson.status === false) {
throw new Error(returnJson.error);
} else {
logger.info(
"当前页面答案收录成功,可以切换至下一页面,手动点击查询按钮上传,或者上传其它练习的答案"
);
}
}
// @requestErrorHandler("上传失败")
static async upload(byUser = false) {
const response = await request.post("/upload/", {
body: {
url: location.href,
cookie: document.cookie
}
});
const returnJson = await response.json();
if (byUser) {
if (returnJson.status) {
logger.info("成功上传练习");
} else {
logger.error("练习上传失败");
logger.debug(returnJson.error);
}
}
}
static async getCourseCatalog() {
const response = await request.post("/catalog/");
const returnJson = await response.json();
if (returnJson.status === false) {
throw new Error(returnJson.error);
} else {
logger.info("成功获取了最新的课程目录");
return returnJson.data;
}
}
}
__decorateClass([
requestErrorHandler("脚本版本查询异常"),
perSession("LAST_CHECK_DATE")
], WELearnAPI, "checkVersion", 1);
__decorateClass([
requestErrorHandler("答案查询失败", "both")
], WELearnAPI, "queryByTaskId", 1);
__decorateClass([
requestErrorHandler("答案查询失败", "both")
], WELearnAPI, "queryByQuestionId", 1);
__decorateClass([
requestErrorHandler("答案查询失败", "both")
], WELearnAPI, "queryByDomString", 1);
__decorateClass([
requestErrorHandler("答案收录失败")
], WELearnAPI, "collectAll", 1);
__decorateClass([
requestErrorHandler("课程目录获取失败", "both"),
perSession("HAS_GET_COURSE_CATALOG")
], WELearnAPI, "getCourseCatalog", 1);
async function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function isFinished() {
return document.querySelector("#aSubmit").style.display == "none" ? true : false;
}
function getTaskId() {
let isSchoolTest = false;
let taskId;
if (location.href.includes("schooltest")) {
isSchoolTest = true;
taskId = parseInt(/schooltestid=(\d*)/.exec(location.href)[1], 10);
} else {
taskId = parseInt(/taskid=(\d*)/.exec(location.href)[1], 10);
}
return {
isSchoolTest,
taskId
};
}
async function getAnswers() {
store.clearLogs();
const { isSchoolTest, taskId } = getTaskId();
if (isFinished()) {
const domString = document.querySelector(".tab-content").outerHTML;
await WELearnAPI.collectAll(taskId, domString, isSchoolTest);
} else {
const returnJson = await WELearnAPI.queryByTaskId(taskId, isSchoolTest);
if (returnJson.status === true) {
for (const [index2, questionWithAnswer] of returnJson.data.entries()) {
await sleep(CONSTANT.QUERY_INTERVAL);
}
} else {
for (const questionItemDiv of document.querySelectorAll(".itemDiv")) {
const domString = questionItemDiv.outerHTML;
try {
const questionWithAnswers = await WELearnAPI.queryByDomString(domString);
for (const questionWithAnswer of questionWithAnswers) {
try {
} catch (error) {
}
if (questionWithAnswer.answerText) {
} else {
}
await sleep(CONSTANT.QUERY_INTERVAL);
}
} catch (error) {
logger.debug(error);
}
}
}
}
}
function hackPlaySound() {
unsafeWindow.PlaySound = (src, id) => {
var count2 = $("#hdPlay_" + id).val();
if (count2 <= 0)
return;
if (soundfile == "") {
soundfile = resPath + "ItemRes/sound/" + src;
createSoundPlayer();
} else {
soundfile = resPath + "ItemRes/sound/" + src;
jwplayer("soundplayer").load([{ file: soundfile }]);
}
jwplayer("soundplayer").onBufferFull(function() {
clearTimeout(bufferingTimer);
var sp = $("#btnPlay_" + id);
sp.html('无限次播放机会');
sp.removeClass("loading");
});
$("#btnPlay_" + id).val("正在加载");
bufferingTimer = setTimeout("PlayerExpireCheck('" + id + "', 0)", 1e3);
$("#btnPlay_" + id).addClass("loading");
jwplayer("soundplayer").play();
};
}
if (location.href.includes(".sflep.com/test/")) {
setTimeout(() => {
if (isFinished()) {
getAnswers();
} else {
if (store.userSettings.infiniteListening) {
hackPlaySound();
}
}
}, 5e3);
}
if (location.href.includes(".sflep.com/student/course_info.aspx?")) {
WELearnAPI.upload();
}
const MANIFEST = [
"https://centercourseware.sflep.com/new century college english secedition integration 2/unit_01/course/texta.html#c09175d4-f281-488f-83fe-87c6bcf2a2b6?nocache=0.6378400703106109",
"new century college english secedition integration 1",
//新世纪大学英语系列教材(第二版)综合教程第一册
"new century college english secedition integration 2",
//新世纪大学英语系列教材(第二版)综合教程第二册
"new century college english secedition integration 3",
//新世纪大学英语系列教材(第二版)综合教程第三册
"new century college english secedition integration 4",
//新世纪大学英语系列教材(第二版)综合教程第四册
"https://centercourseware.sflep.com/an integrated skills course (2nd edition) 2 for vocational college english/unit_02/course/listening.html#f248a182-7d3b-4112-86e8-8fca2706c690?nocache=0.3470470678074564",
"an integrated skills course (2nd edition) 1 for vocational college english",
//新标准高职实用综合教程(第2版)第一册
"an integrated skills course (2nd edition) 2 for vocational college english",
//新标准高职实用综合教程(第2版)第二册
"an integrated skills course (2nd edition) 3 for vocational college english",
//新标准高职实用综合教程(第2版)第三册
"an integrated skills course (2nd edition) 4 for vocational college english",
//新标准高职实用综合教程(第2版)第四册
"https://centercourseware.sflep.com/an integrated skills course 2/unit_07/course/comprehension.html#e2f3d085-ca82-4d79-b31a-1bfe83529d88?nocache=0.5703432807157427",
"an integrated skills course 1",
//新标准高职公共英语系列教材:实用综合教程(精编版)上
"an integrated skills course 2"
//新标准高职公共英语系列教材:实用综合教程(精编版)下
];
const DATA_SOLUTION = [
"https://centercourseware.sflep.com/new progressive college english integrated course 3/unit_01/main10.html?3-1-6&nocache=0.8570993802491391",
"new progressive college english integrated course 1",
//全新版大学进阶英语:综合1
"new progressive college english integrated course 2",
//全新版大学进阶英语:综合2
"new progressive college english integrated course 3",
//全新版大学进阶英语:综合3
"new progressive college english integrated course 4",
//全新版大学进阶英语:综合4
"//centercourseware.sflep.com/new progressive college english integrated course 1-sz/unit_01/main6.html?1-1-6&nocache=0.08870107701951402",
"new progressive college english integrated course 1-sz",
"new progressive college english integrated course 2-sz",
"new progressive college english integrated course 3-sz",
"new progressive college english integrated course 4-sz",
"https://centercourseware.sflep.com/new target college english integrated course 2/unit_05/main.html?2-5-10&nocache=0.7739324146362139",
"new target college english integrated course 1",
//新目标大学英语《综合教程》 第一册;这个是所有页面混杂在一个大页面里的那个
"new target college english integrated course 2",
//新目标大学英语《综合教程》 第二册
"new target college english integrated course 3",
//新目标大学英语《综合教程》 第三册
"new target college english integrated course 4",
//新目标大学英语《综合教程》 第四册
"New Target College English_V2_Integrated Course 1",
"New Target College English_V2_Integrated Course 2",
"New Target College English_V2_Integrated Course 3",
"New Target College English_V2_Integrated Course 4",
"New Advanced College English Grammar Course",
"New Advanced College English-Integrated Course 1",
// todo 每切换一次,都会重新请求catalog,但还是同一个session
"New Advanced College English-Integrated Course 2",
// 所以如果只是后端添加catalog,只有第一个页面有效
"New Advanced College English-Integrated Course 3",
"New Advanced College English-Integrated Course 4"
];
const ET = [
"https://centercourseware.sflep.com/inspire%202/data/1/2-1-2.html",
"inspire 1",
//全新版大学进阶英语:视听说教程1
"inspire 2",
//全新版大学进阶英语:视听说教程2
"inspire 3",
//全新版大学进阶英语:视听说教程3
"inspire 4",
//全新版大学进阶英语:视听说教程4
"https://centercourseware.sflep.com/New College English Viewing Listening Speaking 3/index.html#/1/1-1-1?nocache=0.2182374709016317",
"New College English Viewing Listening Speaking 1",
//全新版大学英语《视听说教程》1
"New College English Viewing Listening Speaking 2",
//全新版大学英语《视听说教程》2
"New College English Viewing Listening Speaking 3",
//全新版大学英语《视听说教程》3
"New College English Viewing Listening Speaking 4",
//全新版大学英语《视听说教程》4
"https://centercourseware.sflep.com/New Target College English Video Course 1/index.html#/u1/TO/1-1?nocache=0.2502474772719703",
//新目标大学英语视听说教程1
"New Target College English Video Course 1",
//新目标大学英语视听说教程1
"New Target College English Video Course 2",
//新目标大学英语视听说教程2
"New Target College English Video Course 3",
//新目标大学英语视听说教程3
"New Target College English Video Course 4",
//新目标大学英语视听说教程4
"New Target College English_V2_Video Course 1",
//新目标大学英语视听说教程1
"New Target College English_V2_Video Course 2",
//新目标大学英语视听说教程1
"New Target College English_V2_Video Course 3",
//新目标大学英语视听说教程1
"New Target College English_V2_Video Course 4",
//新目标大学英语视听说教程1
"https://centercourseware.sflep.com/new century college english video thirdedition 1/index.html#/2/1-1-1?nocache=0.3053014048019431",
"new century college english video thirdedition 1",
//新世纪大学英语系列教材(第二版)视听说教程(3rd Edition)1
"new century college english video thirdedition 2",
//新世纪大学英语系列教材(第二版)视听说教程(3rd Edition)2
"new century college english video thirdedition 3",
//新世纪大学英语系列教材(第二版)视听说教程(3rd Edition)3
"new century college english video thirdedition 4"
//新世纪大学英语系列教材(第二版)视听说教程(3rd Edition)4
];
const READING = [
"https://centercourseware.sflep.com/new century extensive reading course for english majors 2/web.html?courseurl=210_01_05_01&nocache=0.2702018071769088",
"new century extensive reading course for english majors 1",
//新世纪英语专业(修订版)泛读教程(第2版)第一册
"new century extensive reading course for english majors 2",
//新世纪英语专业(修订版)泛读教程(第2版)第二册
"new century extensive reading course for english majors 3",
//新世纪英语专业(修订版)泛读教程(第2版)第三册
"new century extensive reading course for english majors 4"
//新世纪英语专业(修订版)泛读教程(第2版)第四册
];
const APP = [
"https://centercourseware.sflep.com/Progressive English for Vocational Colleges Integrated Course 2/unit_01/main2.html?2-1-w1&nocache=0.2290241426227977",
"Progressive English for Vocational Colleges Integrated Course 2",
//高职国际进阶英语综合教程2
"https://centercourseware.sflep.com/Progressive English for Vocational Colleges A Viewing Listening and Speaking Course 2/unit_01/main2.html?2-1-la_1&nocache=0.450784809471354",
"Progressive English for Vocational Colleges A Viewing Listening and Speaking Course 2",
//高职国际进阶英语视听说教程2
"https://centercourseware.sflep.com/A Viewing Listening and Speaking Course 2/unit_01/main8.html?2-1-7&nocache=0.8280064535686702",
"A Viewing Listening and Speaking Course 2"
//新标准高职公共英语系列教材 实用视听说教程(精编版)
];
const ANSWER_TYPES = [
"et-tof",
//判断题
"et-blank",
//问答题+填空题
"et-select",
//下拉选择题
"et-choice",
//选择题(二选一,多选)
"et-matching",
//连线题
"et-reference",
//口语参考
"et-sort"
];
function parseEt(dom) {
let realAnswers = [];
for (const answerType of ANSWER_TYPES) {
let answers = dom.querySelectorAll(answerType);
logger.debug(answers);
let index2 = 1;
for (const element of answers) {
const answer = parseAnswer$3(element);
if (answer) {
answer.index = index2;
logger.debug(answer);
realAnswers.push(answer);
index2++;
}
}
}
return realAnswers;
}
function parseAnswer$3(element) {
let tag = element.tagName.toLowerCase();
let answerText = "";
switch (tag) {
case "et-tof":
answerText = element.getAttribute("key");
break;
case "et-blank":
if (isRepeat(element))
return;
answerText = element.textContent.split("|")[0];
if (element.hasAttribute("block"))
tag = "et-textarea";
break;
case "et-select":
answerText = element.getAttribute("key");
try {
if (!answerText.length)
answerText = element.firstElementChild.textContent;
} catch (error) {
answerText = "Answers will vary.";
}
break;
case "et-choice":
if (isRepeat(element)) {
if (element.hasAttribute("inline")) {
return;
}
}
answerText = element.getAttribute("key");
break;
case "et-matching":
if (isRepeat(element))
return;
answerText = element.getAttribute("key").split(",").join("\n ");
break;
case "et-reference":
if (!store.userSettings.showReference)
return;
answerText = element.innerHTML;
break;
case "et-sort":
answerText = element.getAttribute("key");
break;
}
return {
text: answerText,
type: tag,
element
};
}
function isRepeat(answerNode) {
let parentElement = answerNode, parentTag;
let webFlag = 0;
let mobileFlag = 0;
try {
for (let i2 = 0; i2 < 9; i2++) {
if (i2 !== 0) {
parentElement = parentElement.parentElement;
}
parentTag = parentElement.tagName;
if (parentTag == "ET-MOBILE-ONLY")
mobileFlag++;
if (parentTag == "ET-WEB-ONLY")
webFlag++;
}
} catch (error) {
} finally {
if (webFlag && mobileFlag) {
if (webFlag > 1) {
return true;
} else {
return false;
}
} else if (webFlag) {
return true;
} else {
return false;
}
}
}
function ready_in(element) {
$(element).trigger("click").trigger("focus").trigger("keydown").trigger("input");
}
function event_trigger(element) {
$(element).trigger("keyup").trigger("change").trigger("blur");
try {
angular.element(element).triggerHandler("hover");
angular.element(element).triggerHandler("keyup");
angular.element(element).triggerHandler("blur");
} catch (error) {
}
}
async function solveEt(answers) {
const tofOnPaper = document.querySelectorAll("et-tof span.controls span");
let tofOrder = 0;
const blankOnPaper = document.querySelectorAll("et-blank span.blank");
const textareaOnPaper = document.querySelectorAll(
'et-blank textarea[ng-model="blank.value"]'
);
let blankOrder = 0;
let textareaOrder = 0;
const selectOnPaper = document.querySelectorAll("et-select div");
let selectOrder = 0;
const optionOnPaper = document.querySelectorAll("et-choice li");
const optionSpanOnPaper = document.querySelectorAll("et-choice span");
let liOrder = 0;
let spanOrder = 0;
let optionOrder = 0;
for (const answer of answers) {
await sleep(store.userSettings.solveInterval);
switch (answer.type) {
case "et-tof":
let tofOption = void 0;
switch (answer.text) {
case "t":
case "T":
tofOption = 2 * tofOrder;
break;
case "f":
case "F":
tofOption = 2 * tofOrder + 1;
break;
default:
throw new Error("tof解答出错");
}
tofOnPaper[tofOption].click();
tofOrder++;
break;
case "et-blank":
ready_in(blankOnPaper[blankOrder]);
blankOnPaper[blankOrder].textContent = answer.text;
event_trigger(blankOnPaper[blankOrder]);
blankOrder++;
break;
case "et-textarea":
if (answer.text.length) {
ready_in(textareaOnPaper[textareaOrder]);
textareaOnPaper[textareaOrder].textContent = answer.text;
textareaOnPaper[textareaOrder].value = answer.text;
event_trigger(textareaOnPaper[textareaOrder]);
}
textareaOrder++;
break;
case "et-select":
const watchedElement = selectOnPaper[selectOrder].querySelector("select");
watchedElement.value = `choice${answer.text}`;
watchedElement.dispatchEvent(new Event("change"));
selectOrder++;
break;
case "et-choice":
let targetOption, options, optionCount;
let spanFlag = false;
try {
options = answer.text.split(",");
} catch (error) {
options = ["1"];
}
logger.debug(options);
if (!(optionCount = answer.element.querySelectorAll("li").length)) {
optionCount = answer.element.querySelectorAll("span").length;
if (optionCount) {
spanFlag = true;
optionOrder = spanOrder;
} else {
optionCount = 4;
}
} else {
optionOrder = liOrder;
}
for (let option of options) {
if (isNaN(parseInt(option))) {
targetOption = optionCount * optionOrder + option.toUpperCase().charCodeAt() - 65;
} else {
targetOption = optionCount * optionOrder + parseInt(option) - 1;
}
logger.debug(
`题号${optionOrder} span${spanOrder} 选项${targetOption} 选项数${optionCount}`
);
if (spanFlag && optionCount) {
try {
optionSpanOnPaper[targetOption].click();
} catch (error) {
optionOnPaper[targetOption].click();
}
} else {
optionOnPaper[targetOption].click();
}
}
if (spanFlag) {
spanOrder++;
} else {
liOrder++;
}
optionOrder++;
break;
case "et-matching":
for (let matchingOrder = 0; matchingOrder < answer.element.getAttribute("key").split(",").length; matchingOrder++) {
await sleep(store.userSettings.solveInterval);
let targetCircle = answer.element.getAttribute("key").split(",")[matchingOrder].split("-")[1] - 1;
let x1 = leftCircles[matchingOrder].getAttribute("cx");
let y1 = leftCircles[matchingOrder].getAttribute("cy");
let x2 = rightCircles[targetCircle].getAttribute("cx");
let y2 = rightCircles[targetCircle].getAttribute("cy");
lineElements[matchingOrder].innerHTML = `
`;
}
break;
}
}
}
function parseManifest(dom) {
let realAnswers = [];
let answers = dom.querySelectorAll("correctResponse value");
logger.debug(answers);
let index2 = 1;
for (const element of answers) {
const answerArray = parseAnswer$2(element, dom);
for (const answer of answerArray) {
if (answer) {
answer.index = index2;
logger.debug(answer);
realAnswers.push(answer);
}
index2++;
}
}
return realAnswers;
}
function parseAnswer$2(element, dom) {
let answerText = "";
let answerType = "";
let returnAnswers = [];
let identifier2 = element.textContent;
if (identifier2.length == 36) {
answerType = "choice";
let selector = `[identifier="${identifier2}"]`;
try {
answerText = dom.querySelector(selector).textContent;
} catch (error) {
answerText = element.textContent;
}
returnAnswers.push({
text: answerText,
type: answerType,
element,
identifier: identifier2
});
} else if (identifier2.length > 200) {
let identifiers = identifier2.split(",");
for (const identifier22 of identifiers) {
let selector = `[identifier="${identifier22}"]`;
answerText = dom.querySelector(selector).textContent;
returnAnswers.push({
text: answerText,
type: "choice",
element,
identifier: identifier22
});
}
} else {
answerText = element.textContent;
answerType = answerText == "(Open.)" ? "textarea" : "blank";
returnAnswers.push({
text: answerText,
type: answerType,
element
});
}
return returnAnswers;
}
async function solveManifest(answers) {
let inputPatternOnPaper = document.querySelectorAll(
'.pattern input[type="text"]'
);
let inputOrder = 0;
let optionLabelOnPaper = document.querySelectorAll("label[for]");
for (const answer of answers) {
await sleep(store.userSettings.solveInterval);
switch (answer.type) {
case "blank":
for (const inputAnswer of answer.text.split(",")) {
try {
inputPatternOnPaper[inputOrder].value = inputAnswer;
} catch (error) {
document.querySelector(".pattern textarea").textContent = inputAnswer;
} finally {
inputOrder++;
}
}
break;
case "textarea":
document.querySelector(".pattern textarea").value = store.userSettings.defaultBlankAnswer;
break;
case "choice":
for (const label of optionLabelOnPaper) {
if (label.getAttribute("for").split("_")[1] == answer.identifier) {
label.click();
try {
let labelHeight = label.getBoundingClientRect().top;
document.querySelector("#divTest").scrollTo(0, labelHeight - 50);
} catch (error) {
}
}
}
break;
}
}
}
let wordTestTimer;
function parseWordTest() {
clearInterval(wordTestTimer);
wordTestTimer = setInterval(() => {
try {
store.clearLogs();
let answer = document.querySelector(
'ul[id^="wordTest"][style=""] > li:last-child'
).textContent;
} catch (error) {
}
}, 2e3);
}
function parseDataSolution() {
let realAnswers = [];
let answers = document.querySelectorAll("[data-solution]");
logger.debug(answers);
let index2 = 1;
for (const element of answers) {
const answer = parseAnswer$1(element);
if (answer) {
answer.index = index2;
logger.debug(answer);
realAnswers.push(answer);
}
index2++;
}
return realAnswers;
}
function parseAnswer$1(element) {
let answerText = element.getAttribute("data-solution");
let answerType = "";
if (answerText) {
answerType = "blank";
} else {
try {
answerText = element.firstElementChild.textContent;
if (!answerText)
answerText = element.textContent;
} catch (error) {
answerText = element.textContent;
}
answerType = "choice";
}
return {
text: answerText,
type: answerType,
element
};
}
async function solveDataSolution(answers) {
const inputOnPaper = document.querySelectorAll("input[data-itemtype]");
let inputOrder = 0;
for (const answer of answers) {
await sleep(store.userSettings.solveInterval);
switch (answer.type) {
case "blank":
inputOnPaper[inputOrder].value = answer.text;
inputOrder++;
break;
case "choice":
answer.element.click();
break;
}
}
}
function parseReading(dom) {
let realAnswers = [];
let answers = dom.querySelectorAll("correctResponse value");
logger.debug(answers);
let index2 = 1;
for (const element of answers) {
const answer = parseAnswer(element, dom);
if (answer) {
answer.index = index2;
logger.debug(answer);
realAnswers.push(answer);
}
index2++;
}
return realAnswers;
}
function parseAnswer(element, dom) {
let answerText = element.textContent;
let answerType = "";
if (answerText.length == 36) {
answerType = "choice";
let selector = `[identifier="${answerText}"]`;
element = dom.querySelector(selector);
answerText = /CDATA\[(.*)\]\]/.exec(element.innerHTML)[1].trim();
} else if (answerText.length == 73) {
answerType = "matching";
} else {
answerType = "blank";
}
return {
text: answerText,
type: answerType,
element
};
}
async function initialCourseCatalog() {
const catalog = await WELearnAPI.getCourseCatalog();
logger.debug({ catalog });
if (catalog === void 0)
return;
const { dataSolution, et: et2, manifest, reading, app } = catalog;
MANIFEST.push(...manifest);
DATA_SOLUTION.push(...dataSolution);
ET.push(...et2);
READING.push(...reading);
APP.push(...app);
logger.debug({
MANIFEST,
DATA_SOLUTION,
ET,
READING,
APP
});
}
const PARSER = new DOMParser();
async function queryData(answerUrl) {
const response = await fetch(answerUrl);
const text = await response.text();
let htmlDom = PARSER.parseFromString(text, "text/html");
logger.debug(htmlDom);
return htmlDom;
}
async function queryManifest(manifestUrl, identifier2, courseInfo) {
const response = await fetch(manifestUrl);
const text = await response.text();
let selector = `resource[identifier="${identifier2}"] file`;
let resource = PARSER.parseFromString(text, "text/html").querySelector(selector).getAttribute("href");
let answerUrl = `https://centercourseware.sflep.com/${courseInfo}/${resource}`;
return queryData(answerUrl);
}
async function outputAnswers(answers) {
for (const answer of answers) {
if (store.userSettings.autoSolve)
;
logger.question({
order: `${String(answer.index).padStart(2, "0")}`,
info: {
content: "标答"
},
answerText: answer.text,
raw: {
element: answer.element
},
solve: {
couldSolve: true,
hasSolved: true,
solveThis: async () => {
logger.debug("solve this");
}
}
});
answer.element.tagName;
await sleep(2e3);
}
}
async function determineCourseType(iframeUrl) {
let courseInfo = /com\/(.*?)\//.exec(iframeUrl)[1];
courseInfo = decodeURI(courseInfo);
logger.debug(courseInfo);
let identifier2 = void 0;
try {
identifier2 = /#(.*)\?/.exec(iframeUrl)[1];
} catch (error) {
}
let manifestUrl = `https://centercourseware.sflep.com/${courseInfo}/resource/manifest.xml`;
let answerUrl = `https://centercourseware.sflep.com/${courseInfo}/data${identifier2}.html`;
let dom;
let answers = [];
let hasAnswer = false;
if (MANIFEST.includes(courseInfo)) {
dom = await queryManifest(manifestUrl, identifier2, courseInfo);
answers = parseManifest(dom);
if (document.querySelector('div[id^="word"]'))
parseWordTest();
if (store.userSettings.autoSolve)
solveManifest(answers);
} else if (ET.includes(courseInfo)) {
dom = await queryData(answerUrl);
answers = parseEt(dom);
if (store.userSettings.autoSolve)
solveEt(answers);
} else if (DATA_SOLUTION.includes(courseInfo)) {
setTimeout(() => {
answers = parseDataSolution();
logger.debug(answers);
if (answers.length) {
outputAnswers(answers);
if (store.userSettings.autoSolve)
solveDataSolution(answers);
} else {
if (!hasAnswer) {
logger.info("此页面已适配,无答案");
}
}
}, 2e3);
} else if (READING.includes(courseInfo)) {
let answerUrl2 = location.href.split("&")[0].replace("web.html?courseurl=", "data/") + ".xml";
dom = await queryData(answerUrl2);
answers = parseReading(dom);
} else {
logger.info(`未适配的课程类型,请在Github反馈`);
logger.info(`${courseInfo}`);
logger.info(`注意页面上是否有二维码,且注明需在app中使用,这种题型只能用app`);
logger.debug("未处理的课程类型");
logger.debug(courseInfo);
logger.debug(identifier2);
}
logger.debug(answers);
if (answers.length) {
hasAnswer = true;
outputAnswers(answers);
}
}
if (location.href.includes("centercourseware.sflep.com")) {
let watcher = function() {
let currentUrl = location.href;
logger.debug(currentUrl);
if (currentUrl != bufferUrl) {
store.clearLogs();
determineCourseType(currentUrl);
}
bufferUrl = currentUrl;
};
let bufferUrl = "";
setInterval(watcher, 200);
initialCourseCatalog();
}
function generateRandomInterval() {
let rate = 1;
const { randomRefresh, refreshIntervalMin, refreshIntervalMax } = store.userSettings;
if (randomRefresh) {
rate = Math.random();
let currentRate = refreshIntervalMin / refreshIntervalMax;
if (rate < currentRate)
rate = currentRate;
}
return rate;
}
function nextChapter() {
const topWindow = top;
const jumpButtons = topWindow.document.querySelectorAll('a[onclick^="SelectSCO"]');
const currentButton = topWindow.document.querySelector("li.courseware_current a");
if (currentButton == jumpButtons[jumpButtons.length - 1]) {
if (store.userSettings.loopRefresh) {
jumpButtons[1].click();
}
} else {
NextSCO();
}
}
async function notify() {
let status = await getValue("hasInformed", false);
if (!status) {
await setValue("hasInformed", true);
}
}
function recur() {
setTimeout(() => {
nextChapter();
recur();
}, store.userSettings.refreshIntervalMax * generateRandomInterval() * 60 * 1e3);
}
async function autoRefresh() {
if (store.userSettings.autoRefresh) {
recur();
notify();
}
}
if (location.href.includes(".sflep.com/student/StudyCourse.aspx?") || location.href.includes(".sflep.com/Course/TryCourse.aspx?")) {
autoRefresh();
}
var client = {};
var m$5 = require$$2;
{
client.createRoot = m$5.createRoot;
client.hydrateRoot = m$5.hydrateRoot;
}
const WELearnExerciseSettings = [
{
title: "练习",
settings: [
{
id: "showReference",
name: "显示参考",
default: true,
valueType: "boolean",
description: "是否显示听力、口语参考(适用视听说)"
},
{
id: "autoSolve",
name: "自动答题",
default: false,
valueType: "boolean",
description: "自动答题开关"
},
{
id: "solveInterval",
name: "答题间隔",
default: 1e3,
valueType: "number",
description: "单位毫秒;自动答题间隔"
},
{
id: "defaultBlankAnswer",
name: "默认填空",
default: "Default answer.",
valueType: "string",
description: "填空题没有固定|正确答案时,填入的默认值"
}
]
}
];
const WELearnExamSettings = [
{
title: "考试",
settings: [
{
id: "infiniteListening",
name: "无限听力",
default: true,
valueType: "boolean",
description: "允许无限次播放听力音频"
}
]
}
];
const WELearnTimeSettings = [
{
title: "时长相关",
settings: [
{
id: "autoRefresh",
name: "自动挂机",
// type: "switch",
default: false,
valueType: "boolean",
description: "是否定时切换下一页,仅用于刷时长"
},
{
id: "loopRefresh",
name: "循环挂机",
// type: "switch",
default: false,
valueType: "boolean",
description: "一遍刷完,是否跳转到开头;自动跳过封锁章节"
},
{
id: "randomRefresh",
name: "随机延时",
// type: "switch",
default: false,
valueType: "boolean",
description: "关闭将以上限为切换时长,开启将取上下限区间内随机时长"
},
{
id: "refreshIntervalMin",
name: "切换下限",
default: 5,
valueType: "number",
description: "单位分钟;we learn允许一个页面最多挂30分钟,所以不要大于30"
},
{
id: "refreshIntervalMax",
name: "切换上限",
default: 10,
valueType: "number",
description: "单位分钟"
}
]
}
];
const commonSettings = [
{
title: "用户",
settings: [
{
id: "userAccount",
name: "身份令牌",
default: "default",
valueType: "string",
description: "随意设定,累计每个人贡献的题目数量"
},
{
id: "userPoints",
name: "累计积分",
readonly: true,
default: 0,
valueType: "number",
description: "上传答案获取,暂无用处"
}
// {
// //离线模式应该不是让用户手动选择的,而是连接服务器失败之后自动操作的,作为备用方案
// id: "targetApi",
// name: "接口选择",
// type: "selection",
// default: 1,
// description: "默认使用哪个查题接口",
// },
]
},
{
title: "UI相关",
settings: [
{
id: "autoScrollDown",
name: "自动下滑",
default: true,
valueType: "boolean",
description: "有新消息时,窗口是否自动下滑到新消息处"
},
{
id: "enableTyping",
name: "打字效果",
default: true,
valueType: "boolean",
description: "如果电脑配置比较低,启用打字效果时,可能会出现打字动画自身的卡顿或者打字动画导致的整个页面的卡顿;这种情况下,建议关闭"
}
]
}
];
function mergeSettings(...arrayOfSectionSettings) {
const sectionSettings = [];
for (const sections of arrayOfSectionSettings) {
for (const section of sections) {
if (!sectionSettings.some((exist) => exist.title == section.title))
sectionSettings.push({ title: section.title, settings: [] });
let index2;
for (let i2 = 0; i2 < sectionSettings.length; i2++) {
if (sectionSettings[i2].title == section.title) {
index2 = i2;
}
}
if (typeof index2 == "undefined")
throw Error("error during get index ");
for (const generic of section.settings) {
const settings = sectionSettings[index2].settings;
if (!settings.some((setting) => setting.id == generic.id))
sectionSettings[index2].settings.push(generic);
}
}
}
return sectionSettings;
}
async function initialUserSettings() {
const sectionSettings = mergeSettings(
WELearnExamSettings,
WELearnExerciseSettings,
WELearnTimeSettings,
commonSettings
);
store.sectionSettings = sectionSettings;
store.setUserSettings(await getValue("userSettings", {}));
logger.debug("设置已读取", { ...store.userSettings });
if (Object.keys(store.userSettings).length === 0) {
store.setDefaultValues();
logger.debug("设置为空,已初始化", { ...store.userSettings });
}
}
function sheetForTag(tag) {
if (tag.sheet) {
return tag.sheet;
}
for (var i2 = 0; i2 < document.styleSheets.length; i2++) {
if (document.styleSheets[i2].ownerNode === tag) {
return document.styleSheets[i2];
}
}
}
function createStyleElement(options) {
var tag = document.createElement("style");
tag.setAttribute("data-emotion", options.key);
if (options.nonce !== void 0) {
tag.setAttribute("nonce", options.nonce);
}
tag.appendChild(document.createTextNode(""));
tag.setAttribute("data-s", "");
return tag;
}
var StyleSheet = /* @__PURE__ */ function() {
function StyleSheet2(options) {
var _this = this;
this._insertTag = function(tag) {
var before;
if (_this.tags.length === 0) {
if (_this.insertionPoint) {
before = _this.insertionPoint.nextSibling;
} else if (_this.prepend) {
before = _this.container.firstChild;
} else {
before = _this.before;
}
} else {
before = _this.tags[_this.tags.length - 1].nextSibling;
}
_this.container.insertBefore(tag, before);
_this.tags.push(tag);
};
this.isSpeedy = options.speedy === void 0 ? true : options.speedy;
this.tags = [];
this.ctr = 0;
this.nonce = options.nonce;
this.key = options.key;
this.container = options.container;
this.prepend = options.prepend;
this.insertionPoint = options.insertionPoint;
this.before = null;
}
var _proto = StyleSheet2.prototype;
_proto.hydrate = function hydrate(nodes) {
nodes.forEach(this._insertTag);
};
_proto.insert = function insert(rule) {
if (this.ctr % (this.isSpeedy ? 65e3 : 1) === 0) {
this._insertTag(createStyleElement(this));
}
var tag = this.tags[this.tags.length - 1];
if (this.isSpeedy) {
var sheet = sheetForTag(tag);
try {
sheet.insertRule(rule, sheet.cssRules.length);
} catch (e2) {
}
} else {
tag.appendChild(document.createTextNode(rule));
}
this.ctr++;
};
_proto.flush = function flush() {
this.tags.forEach(function(tag) {
return tag.parentNode && tag.parentNode.removeChild(tag);
});
this.tags = [];
this.ctr = 0;
};
return StyleSheet2;
}();
var MS = "-ms-";
var MOZ = "-moz-";
var WEBKIT = "-webkit-";
var COMMENT = "comm";
var RULESET = "rule";
var DECLARATION = "decl";
var IMPORT = "@import";
var KEYFRAMES = "@keyframes";
var abs = Math.abs;
var from = String.fromCharCode;
var assign = Object.assign;
function hash(value, length2) {
return charat(value, 0) ^ 45 ? (((length2 << 2 ^ charat(value, 0)) << 2 ^ charat(value, 1)) << 2 ^ charat(value, 2)) << 2 ^ charat(value, 3) : 0;
}
function trim(value) {
return value.trim();
}
function match(value, pattern) {
return (value = pattern.exec(value)) ? value[0] : value;
}
function replace(value, pattern, replacement) {
return value.replace(pattern, replacement);
}
function indexof(value, search) {
return value.indexOf(search);
}
function charat(value, index2) {
return value.charCodeAt(index2) | 0;
}
function substr(value, begin, end) {
return value.slice(begin, end);
}
function strlen(value) {
return value.length;
}
function sizeof(value) {
return value.length;
}
function append(value, array) {
return array.push(value), value;
}
function combine(array, callback) {
return array.map(callback).join("");
}
var line = 1;
var column = 1;
var length = 0;
var position = 0;
var character = 0;
var characters = "";
function node(value, root2, parent, type, props, children, length2) {
return { value, root: root2, parent, type, props, children, line, column, length: length2, return: "" };
}
function copy(root2, props) {
return assign(node("", null, null, "", null, null, 0), root2, { length: -root2.length }, props);
}
function char() {
return character;
}
function prev() {
character = position > 0 ? charat(characters, --position) : 0;
if (column--, character === 10)
column = 1, line--;
return character;
}
function next() {
character = position < length ? charat(characters, position++) : 0;
if (column++, character === 10)
column = 1, line++;
return character;
}
function peek() {
return charat(characters, position);
}
function caret() {
return position;
}
function slice(begin, end) {
return substr(characters, begin, end);
}
function token(type) {
switch (type) {
case 0:
case 9:
case 10:
case 13:
case 32:
return 5;
case 33:
case 43:
case 44:
case 47:
case 62:
case 64:
case 126:
case 59:
case 123:
case 125:
return 4;
case 58:
return 3;
case 34:
case 39:
case 40:
case 91:
return 2;
case 41:
case 93:
return 1;
}
return 0;
}
function alloc(value) {
return line = column = 1, length = strlen(characters = value), position = 0, [];
}
function dealloc(value) {
return characters = "", value;
}
function delimit(type) {
return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)));
}
function whitespace(type) {
while (character = peek())
if (character < 33)
next();
else
break;
return token(type) > 2 || token(character) > 3 ? "" : " ";
}
function escaping(index2, count2) {
while (--count2 && next())
if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97)
break;
return slice(index2, caret() + (count2 < 6 && peek() == 32 && next() == 32));
}
function delimiter(type) {
while (next())
switch (character) {
case type:
return position;
case 34:
case 39:
if (type !== 34 && type !== 39)
delimiter(character);
break;
case 40:
if (type === 41)
delimiter(type);
break;
case 92:
next();
break;
}
return position;
}
function commenter(type, index2) {
while (next())
if (type + character === 47 + 10)
break;
else if (type + character === 42 + 42 && peek() === 47)
break;
return "/*" + slice(index2, position - 1) + "*" + from(type === 47 ? type : next());
}
function identifier(index2) {
while (!token(peek()))
next();
return slice(index2, position);
}
function compile(value) {
return dealloc(parse("", null, null, null, [""], value = alloc(value), 0, [0], value));
}
function parse(value, root2, parent, rule, rules, rulesets, pseudo, points, declarations) {
var index2 = 0;
var offset = 0;
var length2 = pseudo;
var atrule = 0;
var property = 0;
var previous = 0;
var variable = 1;
var scanning = 1;
var ampersand = 1;
var character2 = 0;
var type = "";
var props = rules;
var children = rulesets;
var reference = rule;
var characters2 = type;
while (scanning)
switch (previous = character2, character2 = next()) {
case 40:
if (previous != 108 && charat(characters2, length2 - 1) == 58) {
if (indexof(characters2 += replace(delimit(character2), "&", "&\f"), "&\f") != -1)
ampersand = -1;
break;
}
case 34:
case 39:
case 91:
characters2 += delimit(character2);
break;
case 9:
case 10:
case 13:
case 32:
characters2 += whitespace(previous);
break;
case 92:
characters2 += escaping(caret() - 1, 7);
continue;
case 47:
switch (peek()) {
case 42:
case 47:
append(comment(commenter(next(), caret()), root2, parent), declarations);
break;
default:
characters2 += "/";
}
break;
case 123 * variable:
points[index2++] = strlen(characters2) * ampersand;
case 125 * variable:
case 59:
case 0:
switch (character2) {
case 0:
case 125:
scanning = 0;
case 59 + offset:
if (property > 0 && strlen(characters2) - length2)
append(property > 32 ? declaration(characters2 + ";", rule, parent, length2 - 1) : declaration(replace(characters2, " ", "") + ";", rule, parent, length2 - 2), declarations);
break;
case 59:
characters2 += ";";
default:
append(reference = ruleset(characters2, root2, parent, index2, offset, rules, points, type, props = [], children = [], length2), rulesets);
if (character2 === 123)
if (offset === 0)
parse(characters2, root2, reference, reference, props, rulesets, length2, points, children);
else
switch (atrule === 99 && charat(characters2, 3) === 110 ? 100 : atrule) {
case 100:
case 109:
case 115:
parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length2), children), rules, children, length2, points, rule ? props : children);
break;
default:
parse(characters2, reference, reference, reference, [""], children, 0, points, children);
}
}
index2 = offset = property = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo;
break;
case 58:
length2 = 1 + strlen(characters2), property = previous;
default:
if (variable < 1) {
if (character2 == 123)
--variable;
else if (character2 == 125 && variable++ == 0 && prev() == 125)
continue;
}
switch (characters2 += from(character2), character2 * variable) {
case 38:
ampersand = offset > 0 ? 1 : (characters2 += "\f", -1);
break;
case 44:
points[index2++] = (strlen(characters2) - 1) * ampersand, ampersand = 1;
break;
case 64:
if (peek() === 45)
characters2 += delimit(next());
atrule = peek(), offset = length2 = strlen(type = characters2 += identifier(caret())), character2++;
break;
case 45:
if (previous === 45 && strlen(characters2) == 2)
variable = 0;
}
}
return rulesets;
}
function ruleset(value, root2, parent, index2, offset, rules, points, type, props, children, length2) {
var post = offset - 1;
var rule = offset === 0 ? rules : [""];
var size = sizeof(rule);
for (var i2 = 0, j2 = 0, k2 = 0; i2 < index2; ++i2)
for (var x2 = 0, y2 = substr(value, post + 1, post = abs(j2 = points[i2])), z2 = value; x2 < size; ++x2)
if (z2 = trim(j2 > 0 ? rule[x2] + " " + y2 : replace(y2, /&\f/g, rule[x2])))
props[k2++] = z2;
return node(value, root2, parent, offset === 0 ? RULESET : type, props, children, length2);
}
function comment(value, root2, parent) {
return node(value, root2, parent, COMMENT, from(char()), substr(value, 2, -2), 0);
}
function declaration(value, root2, parent, length2) {
return node(value, root2, parent, DECLARATION, substr(value, 0, length2), substr(value, length2 + 1, -1), length2);
}
function serialize(children, callback) {
var output = "";
var length2 = sizeof(children);
for (var i2 = 0; i2 < length2; i2++)
output += callback(children[i2], i2, children, callback) || "";
return output;
}
function stringify(element, index2, children, callback) {
switch (element.type) {
case IMPORT:
case DECLARATION:
return element.return = element.return || element.value;
case COMMENT:
return "";
case KEYFRAMES:
return element.return = element.value + "{" + serialize(element.children, callback) + "}";
case RULESET:
element.value = element.props.join(",");
}
return strlen(children = serialize(element.children, callback)) ? element.return = element.value + "{" + children + "}" : "";
}
function middleware(collection) {
var length2 = sizeof(collection);
return function(element, index2, children, callback) {
var output = "";
for (var i2 = 0; i2 < length2; i2++)
output += collection[i2](element, index2, children, callback) || "";
return output;
};
}
function rulesheet(callback) {
return function(element) {
if (!element.root) {
if (element = element.return)
callback(element);
}
};
}
var weakMemoize = function weakMemoize2(func) {
var cache = /* @__PURE__ */ new WeakMap();
return function(arg) {
if (cache.has(arg)) {
return cache.get(arg);
}
var ret = func(arg);
cache.set(arg, ret);
return ret;
};
};
function memoize(fn) {
var cache = /* @__PURE__ */ Object.create(null);
return function(arg) {
if (cache[arg] === void 0)
cache[arg] = fn(arg);
return cache[arg];
};
}
var identifierWithPointTracking = function identifierWithPointTracking2(begin, points, index2) {
var previous = 0;
var character2 = 0;
while (true) {
previous = character2;
character2 = peek();
if (previous === 38 && character2 === 12) {
points[index2] = 1;
}
if (token(character2)) {
break;
}
next();
}
return slice(begin, position);
};
var toRules = function toRules2(parsed, points) {
var index2 = -1;
var character2 = 44;
do {
switch (token(character2)) {
case 0:
if (character2 === 38 && peek() === 12) {
points[index2] = 1;
}
parsed[index2] += identifierWithPointTracking(position - 1, points, index2);
break;
case 2:
parsed[index2] += delimit(character2);
break;
case 4:
if (character2 === 44) {
parsed[++index2] = peek() === 58 ? "&\f" : "";
points[index2] = parsed[index2].length;
break;
}
default:
parsed[index2] += from(character2);
}
} while (character2 = next());
return parsed;
};
var getRules = function getRules2(value, points) {
return dealloc(toRules(alloc(value), points));
};
var fixedElements = /* @__PURE__ */ new WeakMap();
var compat = function compat2(element) {
if (element.type !== "rule" || !element.parent || // positive .length indicates that this rule contains pseudo
// negative .length indicates that this rule has been already prefixed
element.length < 1) {
return;
}
var value = element.value, parent = element.parent;
var isImplicitRule = element.column === parent.column && element.line === parent.line;
while (parent.type !== "rule") {
parent = parent.parent;
if (!parent)
return;
}
if (element.props.length === 1 && value.charCodeAt(0) !== 58 && !fixedElements.get(parent)) {
return;
}
if (isImplicitRule) {
return;
}
fixedElements.set(element, true);
var points = [];
var rules = getRules(value, points);
var parentRules = parent.props;
for (var i2 = 0, k2 = 0; i2 < rules.length; i2++) {
for (var j2 = 0; j2 < parentRules.length; j2++, k2++) {
element.props[k2] = points[i2] ? rules[i2].replace(/&\f/g, parentRules[j2]) : parentRules[j2] + " " + rules[i2];
}
}
};
var removeLabel = function removeLabel2(element) {
if (element.type === "decl") {
var value = element.value;
if (
// charcode for l
value.charCodeAt(0) === 108 && // charcode for b
value.charCodeAt(2) === 98
) {
element["return"] = "";
element.value = "";
}
}
};
function prefix(value, length2) {
switch (hash(value, length2)) {
case 5103:
return WEBKIT + "print-" + value + value;
case 5737:
case 4201:
case 3177:
case 3433:
case 1641:
case 4457:
case 2921:
case 5572:
case 6356:
case 5844:
case 3191:
case 6645:
case 3005:
case 6391:
case 5879:
case 5623:
case 6135:
case 4599:
case 4855:
case 4215:
case 6389:
case 5109:
case 5365:
case 5621:
case 3829:
return WEBKIT + value + value;
case 5349:
case 4246:
case 4810:
case 6968:
case 2756:
return WEBKIT + value + MOZ + value + MS + value + value;
case 6828:
case 4268:
return WEBKIT + value + MS + value + value;
case 6165:
return WEBKIT + value + MS + "flex-" + value + value;
case 5187:
return WEBKIT + value + replace(value, /(\w+).+(:[^]+)/, WEBKIT + "box-$1$2" + MS + "flex-$1$2") + value;
case 5443:
return WEBKIT + value + MS + "flex-item-" + replace(value, /flex-|-self/, "") + value;
case 4675:
return WEBKIT + value + MS + "flex-line-pack" + replace(value, /align-content|flex-|-self/, "") + value;
case 5548:
return WEBKIT + value + MS + replace(value, "shrink", "negative") + value;
case 5292:
return WEBKIT + value + MS + replace(value, "basis", "preferred-size") + value;
case 6060:
return WEBKIT + "box-" + replace(value, "-grow", "") + WEBKIT + value + MS + replace(value, "grow", "positive") + value;
case 4554:
return WEBKIT + replace(value, /([^-])(transform)/g, "$1" + WEBKIT + "$2") + value;
case 6187:
return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + "$1"), /(image-set)/, WEBKIT + "$1"), value, "") + value;
case 5495:
case 3959:
return replace(value, /(image-set\([^]*)/, WEBKIT + "$1$`$1");
case 4968:
return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + "box-pack:$3" + MS + "flex-pack:$3"), /s.+-b[^;]+/, "justify") + WEBKIT + value + value;
case 4095:
case 3583:
case 4068:
case 2532:
return replace(value, /(.+)-inline(.+)/, WEBKIT + "$1$2") + value;
case 8116:
case 7059:
case 5753:
case 5535:
case 5445:
case 5701:
case 4933:
case 4677:
case 5533:
case 5789:
case 5021:
case 4765:
if (strlen(value) - 1 - length2 > 6)
switch (charat(value, length2 + 1)) {
case 109:
if (charat(value, length2 + 4) !== 45)
break;
case 102:
return replace(value, /(.+:)(.+)-([^]+)/, "$1" + WEBKIT + "$2-$3$1" + MOZ + (charat(value, length2 + 3) == 108 ? "$3" : "$2-$3")) + value;
case 115:
return ~indexof(value, "stretch") ? prefix(replace(value, "stretch", "fill-available"), length2) + value : value;
}
break;
case 4949:
if (charat(value, length2 + 1) !== 115)
break;
case 6444:
switch (charat(value, strlen(value) - 3 - (~indexof(value, "!important") && 10))) {
case 107:
return replace(value, ":", ":" + WEBKIT) + value;
case 101:
return replace(value, /(.+:)([^;!]+)(;|!.+)?/, "$1" + WEBKIT + (charat(value, 14) === 45 ? "inline-" : "") + "box$3$1" + WEBKIT + "$2$3$1" + MS + "$2box$3") + value;
}
break;
case 5936:
switch (charat(value, length2 + 11)) {
case 114:
return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "tb") + value;
case 108:
return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "tb-rl") + value;
case 45:
return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "lr") + value;
}
return WEBKIT + value + MS + value + value;
}
return value;
}
var prefixer = function prefixer2(element, index2, children, callback) {
if (element.length > -1) {
if (!element["return"])
switch (element.type) {
case DECLARATION:
element["return"] = prefix(element.value, element.length);
break;
case KEYFRAMES:
return serialize([copy(element, {
value: replace(element.value, "@", "@" + WEBKIT)
})], callback);
case RULESET:
if (element.length)
return combine(element.props, function(value) {
switch (match(value, /(::plac\w+|:read-\w+)/)) {
case ":read-only":
case ":read-write":
return serialize([copy(element, {
props: [replace(value, /:(read-\w+)/, ":" + MOZ + "$1")]
})], callback);
case "::placeholder":
return serialize([copy(element, {
props: [replace(value, /:(plac\w+)/, ":" + WEBKIT + "input-$1")]
}), copy(element, {
props: [replace(value, /:(plac\w+)/, ":" + MOZ + "$1")]
}), copy(element, {
props: [replace(value, /:(plac\w+)/, MS + "input-$1")]
})], callback);
}
return "";
});
}
}
};
var defaultStylisPlugins = [prefixer];
var createCache = function createCache2(options) {
var key = options.key;
if (key === "css") {
var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])");
Array.prototype.forEach.call(ssrStyles, function(node2) {
var dataEmotionAttribute = node2.getAttribute("data-emotion");
if (dataEmotionAttribute.indexOf(" ") === -1) {
return;
}
document.head.appendChild(node2);
node2.setAttribute("data-s", "");
});
}
var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;
var inserted = {};
var container;
var nodesToHydrate = [];
{
container = options.container || document.head;
Array.prototype.forEach.call(
// this means we will ignore elements which don't have a space in them which
// means that the style elements we're looking at are only Emotion 11 server-rendered style elements
document.querySelectorAll('style[data-emotion^="' + key + ' "]'),
function(node2) {
var attrib = node2.getAttribute("data-emotion").split(" ");
for (var i2 = 1; i2 < attrib.length; i2++) {
inserted[attrib[i2]] = true;
}
nodesToHydrate.push(node2);
}
);
}
var _insert;
var omnipresentPlugins = [compat, removeLabel];
{
var currentSheet;
var finalizingPlugins = [stringify, rulesheet(function(rule) {
currentSheet.insert(rule);
})];
var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));
var stylis = function stylis2(styles) {
return serialize(compile(styles), serializer);
};
_insert = function insert(selector, serialized, sheet, shouldCache) {
currentSheet = sheet;
stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);
if (shouldCache) {
cache.inserted[serialized.name] = true;
}
};
}
var cache = {
key,
sheet: new StyleSheet({
key,
container,
nonce: options.nonce,
speedy: options.speedy,
prepend: options.prepend,
insertionPoint: options.insertionPoint
}),
nonce: options.nonce,
inserted,
registered: {},
insert: _insert
};
cache.sheet.hydrate(nodesToHydrate);
return cache;
};
function _extends$1() {
_extends$1 = Object.assign ? Object.assign.bind() : function(target) {
for (var i2 = 1; i2 < arguments.length; i2++) {
var source = arguments[i2];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends$1.apply(this, arguments);
}
var reactIsExports = {};
var reactIs$1 = {
get exports() {
return reactIsExports;
},
set exports(v2) {
reactIsExports = v2;
}
};
var reactIs_production_min = {};
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var b$5 = "function" === typeof Symbol && Symbol.for, c$6 = b$5 ? Symbol.for("react.element") : 60103, d$4 = b$5 ? Symbol.for("react.portal") : 60106, e$1 = b$5 ? Symbol.for("react.fragment") : 60107, f$4 = b$5 ? Symbol.for("react.strict_mode") : 60108, g$4 = b$5 ? Symbol.for("react.profiler") : 60114, h$6 = b$5 ? Symbol.for("react.provider") : 60109, k$3 = b$5 ? Symbol.for("react.context") : 60110, l$5 = b$5 ? Symbol.for("react.async_mode") : 60111, m$4 = b$5 ? Symbol.for("react.concurrent_mode") : 60111, n$3 = b$5 ? Symbol.for("react.forward_ref") : 60112, p$4 = b$5 ? Symbol.for("react.suspense") : 60113, q$2 = b$5 ? Symbol.for("react.suspense_list") : 60120, r$4 = b$5 ? Symbol.for("react.memo") : 60115, t$1 = b$5 ? Symbol.for("react.lazy") : 60116, v$4 = b$5 ? Symbol.for("react.block") : 60121, w$3 = b$5 ? Symbol.for("react.fundamental") : 60117, x$5 = b$5 ? Symbol.for("react.responder") : 60118, y$6 = b$5 ? Symbol.for("react.scope") : 60119;
function z$3(a2) {
if ("object" === typeof a2 && null !== a2) {
var u2 = a2.$$typeof;
switch (u2) {
case c$6:
switch (a2 = a2.type, a2) {
case l$5:
case m$4:
case e$1:
case g$4:
case f$4:
case p$4:
return a2;
default:
switch (a2 = a2 && a2.$$typeof, a2) {
case k$3:
case n$3:
case t$1:
case r$4:
case h$6:
return a2;
default:
return u2;
}
}
case d$4:
return u2;
}
}
}
function A$2(a2) {
return z$3(a2) === m$4;
}
reactIs_production_min.AsyncMode = l$5;
reactIs_production_min.ConcurrentMode = m$4;
reactIs_production_min.ContextConsumer = k$3;
reactIs_production_min.ContextProvider = h$6;
reactIs_production_min.Element = c$6;
reactIs_production_min.ForwardRef = n$3;
reactIs_production_min.Fragment = e$1;
reactIs_production_min.Lazy = t$1;
reactIs_production_min.Memo = r$4;
reactIs_production_min.Portal = d$4;
reactIs_production_min.Profiler = g$4;
reactIs_production_min.StrictMode = f$4;
reactIs_production_min.Suspense = p$4;
reactIs_production_min.isAsyncMode = function(a2) {
return A$2(a2) || z$3(a2) === l$5;
};
reactIs_production_min.isConcurrentMode = A$2;
reactIs_production_min.isContextConsumer = function(a2) {
return z$3(a2) === k$3;
};
reactIs_production_min.isContextProvider = function(a2) {
return z$3(a2) === h$6;
};
reactIs_production_min.isElement = function(a2) {
return "object" === typeof a2 && null !== a2 && a2.$$typeof === c$6;
};
reactIs_production_min.isForwardRef = function(a2) {
return z$3(a2) === n$3;
};
reactIs_production_min.isFragment = function(a2) {
return z$3(a2) === e$1;
};
reactIs_production_min.isLazy = function(a2) {
return z$3(a2) === t$1;
};
reactIs_production_min.isMemo = function(a2) {
return z$3(a2) === r$4;
};
reactIs_production_min.isPortal = function(a2) {
return z$3(a2) === d$4;
};
reactIs_production_min.isProfiler = function(a2) {
return z$3(a2) === g$4;
};
reactIs_production_min.isStrictMode = function(a2) {
return z$3(a2) === f$4;
};
reactIs_production_min.isSuspense = function(a2) {
return z$3(a2) === p$4;
};
reactIs_production_min.isValidElementType = function(a2) {
return "string" === typeof a2 || "function" === typeof a2 || a2 === e$1 || a2 === m$4 || a2 === g$4 || a2 === f$4 || a2 === p$4 || a2 === q$2 || "object" === typeof a2 && null !== a2 && (a2.$$typeof === t$1 || a2.$$typeof === r$4 || a2.$$typeof === h$6 || a2.$$typeof === k$3 || a2.$$typeof === n$3 || a2.$$typeof === w$3 || a2.$$typeof === x$5 || a2.$$typeof === y$6 || a2.$$typeof === v$4);
};
reactIs_production_min.typeOf = z$3;
(function(module) {
{
module.exports = reactIs_production_min;
}
})(reactIs$1);
var reactIs = reactIsExports;
var FORWARD_REF_STATICS = {
"$$typeof": true,
render: true,
defaultProps: true,
displayName: true,
propTypes: true
};
var MEMO_STATICS = {
"$$typeof": true,
compare: true,
defaultProps: true,
displayName: true,
propTypes: true,
type: true
};
var TYPE_STATICS = {};
TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;
TYPE_STATICS[reactIs.Memo] = MEMO_STATICS;
var isBrowser = true;
function getRegisteredStyles(registered, registeredStyles, classNames) {
var rawClassName = "";
classNames.split(" ").forEach(function(className) {
if (registered[className] !== void 0) {
registeredStyles.push(registered[className] + ";");
} else {
rawClassName += className + " ";
}
});
return rawClassName;
}
var registerStyles = function registerStyles2(cache, serialized, isStringTag) {
var className = cache.key + "-" + serialized.name;
if (
// we only need to add the styles to the registered cache if the
// class name could be used further down
// the tree but if it's a string tag, we know it won't
// so we don't have to add it to registered cache.
// this improves memory usage since we can avoid storing the whole style string
(isStringTag === false || // we need to always store it if we're in compat mode and
// in node since emotion-server relies on whether a style is in
// the registered cache to know whether a style is global or not
// also, note that this check will be dead code eliminated in the browser
isBrowser === false) && cache.registered[className] === void 0
) {
cache.registered[className] = serialized.styles;
}
};
var insertStyles = function insertStyles2(cache, serialized, isStringTag) {
registerStyles(cache, serialized, isStringTag);
var className = cache.key + "-" + serialized.name;
if (cache.inserted[serialized.name] === void 0) {
var current = serialized;
do {
cache.insert(serialized === current ? "." + className : "", current, cache.sheet, true);
current = current.next;
} while (current !== void 0);
}
};
function murmur2(str) {
var h2 = 0;
var k2, i2 = 0, len = str.length;
for (; len >= 4; ++i2, len -= 4) {
k2 = str.charCodeAt(i2) & 255 | (str.charCodeAt(++i2) & 255) << 8 | (str.charCodeAt(++i2) & 255) << 16 | (str.charCodeAt(++i2) & 255) << 24;
k2 = /* Math.imul(k, m): */
(k2 & 65535) * 1540483477 + ((k2 >>> 16) * 59797 << 16);
k2 ^= /* k >>> r: */
k2 >>> 24;
h2 = /* Math.imul(k, m): */
(k2 & 65535) * 1540483477 + ((k2 >>> 16) * 59797 << 16) ^ /* Math.imul(h, m): */
(h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16);
}
switch (len) {
case 3:
h2 ^= (str.charCodeAt(i2 + 2) & 255) << 16;
case 2:
h2 ^= (str.charCodeAt(i2 + 1) & 255) << 8;
case 1:
h2 ^= str.charCodeAt(i2) & 255;
h2 = /* Math.imul(h, m): */
(h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16);
}
h2 ^= h2 >>> 13;
h2 = /* Math.imul(h, m): */
(h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16);
return ((h2 ^ h2 >>> 15) >>> 0).toString(36);
}
var unitlessKeys = {
animationIterationCount: 1,
borderImageOutset: 1,
borderImageSlice: 1,
borderImageWidth: 1,
boxFlex: 1,
boxFlexGroup: 1,
boxOrdinalGroup: 1,
columnCount: 1,
columns: 1,
flex: 1,
flexGrow: 1,
flexPositive: 1,
flexShrink: 1,
flexNegative: 1,
flexOrder: 1,
gridRow: 1,
gridRowEnd: 1,
gridRowSpan: 1,
gridRowStart: 1,
gridColumn: 1,
gridColumnEnd: 1,
gridColumnSpan: 1,
gridColumnStart: 1,
msGridRow: 1,
msGridRowSpan: 1,
msGridColumn: 1,
msGridColumnSpan: 1,
fontWeight: 1,
lineHeight: 1,
opacity: 1,
order: 1,
orphans: 1,
tabSize: 1,
widows: 1,
zIndex: 1,
zoom: 1,
WebkitLineClamp: 1,
// SVG-related properties
fillOpacity: 1,
floodOpacity: 1,
stopOpacity: 1,
strokeDasharray: 1,
strokeDashoffset: 1,
strokeMiterlimit: 1,
strokeOpacity: 1,
strokeWidth: 1
};
var hyphenateRegex = /[A-Z]|^ms/g;
var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;
var isCustomProperty = function isCustomProperty2(property) {
return property.charCodeAt(1) === 45;
};
var isProcessableValue = function isProcessableValue2(value) {
return value != null && typeof value !== "boolean";
};
var processStyleName = /* @__PURE__ */ memoize(function(styleName) {
return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, "-$&").toLowerCase();
});
var processStyleValue = function processStyleValue2(key, value) {
switch (key) {
case "animation":
case "animationName": {
if (typeof value === "string") {
return value.replace(animationRegex, function(match2, p1, p2) {
cursor = {
name: p1,
styles: p2,
next: cursor
};
return p1;
});
}
}
}
if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === "number" && value !== 0) {
return value + "px";
}
return value;
};
var noComponentSelectorMessage = "Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";
function handleInterpolation(mergedProps, registered, interpolation) {
if (interpolation == null) {
return "";
}
if (interpolation.__emotion_styles !== void 0) {
return interpolation;
}
switch (typeof interpolation) {
case "boolean": {
return "";
}
case "object": {
if (interpolation.anim === 1) {
cursor = {
name: interpolation.name,
styles: interpolation.styles,
next: cursor
};
return interpolation.name;
}
if (interpolation.styles !== void 0) {
var next2 = interpolation.next;
if (next2 !== void 0) {
while (next2 !== void 0) {
cursor = {
name: next2.name,
styles: next2.styles,
next: cursor
};
next2 = next2.next;
}
}
var styles = interpolation.styles + ";";
return styles;
}
return createStringFromObject(mergedProps, registered, interpolation);
}
case "function": {
if (mergedProps !== void 0) {
var previousCursor = cursor;
var result = interpolation(mergedProps);
cursor = previousCursor;
return handleInterpolation(mergedProps, registered, result);
}
break;
}
}
if (registered == null) {
return interpolation;
}
var cached = registered[interpolation];
return cached !== void 0 ? cached : interpolation;
}
function createStringFromObject(mergedProps, registered, obj) {
var string = "";
if (Array.isArray(obj)) {
for (var i2 = 0; i2 < obj.length; i2++) {
string += handleInterpolation(mergedProps, registered, obj[i2]) + ";";
}
} else {
for (var _key in obj) {
var value = obj[_key];
if (typeof value !== "object") {
if (registered != null && registered[value] !== void 0) {
string += _key + "{" + registered[value] + "}";
} else if (isProcessableValue(value)) {
string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";";
}
} else {
if (_key === "NO_COMPONENT_SELECTOR" && false) {
throw new Error(noComponentSelectorMessage);
}
if (Array.isArray(value) && typeof value[0] === "string" && (registered == null || registered[value[0]] === void 0)) {
for (var _i = 0; _i < value.length; _i++) {
if (isProcessableValue(value[_i])) {
string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";";
}
}
} else {
var interpolated = handleInterpolation(mergedProps, registered, value);
switch (_key) {
case "animation":
case "animationName": {
string += processStyleName(_key) + ":" + interpolated + ";";
break;
}
default: {
string += _key + "{" + interpolated + "}";
}
}
}
}
}
}
return string;
}
var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g;
var cursor;
var serializeStyles = function serializeStyles2(args, registered, mergedProps) {
if (args.length === 1 && typeof args[0] === "object" && args[0] !== null && args[0].styles !== void 0) {
return args[0];
}
var stringMode = true;
var styles = "";
cursor = void 0;
var strings = args[0];
if (strings == null || strings.raw === void 0) {
stringMode = false;
styles += handleInterpolation(mergedProps, registered, strings);
} else {
styles += strings[0];
}
for (var i2 = 1; i2 < args.length; i2++) {
styles += handleInterpolation(mergedProps, registered, args[i2]);
if (stringMode) {
styles += strings[i2];
}
}
labelPattern.lastIndex = 0;
var identifierName = "";
var match2;
while ((match2 = labelPattern.exec(styles)) !== null) {
identifierName += "-" + // $FlowFixMe we know it's not null
match2[1];
}
var name = murmur2(styles) + identifierName;
return {
name,
styles,
next: cursor
};
};
var syncFallback = function syncFallback2(create) {
return create();
};
var useInsertionEffect$1 = React__namespace["useInsertionEffect"] ? React__namespace["useInsertionEffect"] : false;
var useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect$1 || syncFallback;
var useInsertionEffectWithLayoutFallback = useInsertionEffect$1 || React$1.useLayoutEffect;
var EmotionCacheContext = /* @__PURE__ */ React$1.createContext(
// we're doing this to avoid preconstruct's dead code elimination in this one case
// because this module is primarily intended for the browser and node
// but it's also required in react native and similar environments sometimes
// and we could have a special build just for that
// but this is much easier and the native packages
// might use a different theme context in the future anyway
typeof HTMLElement !== "undefined" ? /* @__PURE__ */ createCache({
key: "css"
}) : null
);
EmotionCacheContext.Provider;
var withEmotionCache = function withEmotionCache2(func) {
return /* @__PURE__ */ React$1.forwardRef(function(props, ref) {
var cache = React$1.useContext(EmotionCacheContext);
return func(props, cache, ref);
});
};
var ThemeContext = /* @__PURE__ */ React$1.createContext({});
var useTheme = function useTheme2() {
return React$1.useContext(ThemeContext);
};
var getTheme = function getTheme2(outerTheme, theme2) {
if (typeof theme2 === "function") {
var mergedTheme = theme2(outerTheme);
return mergedTheme;
}
return _extends$1({}, outerTheme, theme2);
};
var createCacheWithTheme = /* @__PURE__ */ weakMemoize(function(outerTheme) {
return weakMemoize(function(theme2) {
return getTheme(outerTheme, theme2);
});
});
var ThemeProvider = function ThemeProvider2(props) {
var theme2 = React$1.useContext(ThemeContext);
if (props.theme !== theme2) {
theme2 = createCacheWithTheme(theme2)(props.theme);
}
return /* @__PURE__ */ React$1.createElement(ThemeContext.Provider, {
value: theme2
}, props.children);
};
var Global = /* @__PURE__ */ withEmotionCache(function(props, cache) {
var styles = props.styles;
var serialized = serializeStyles([styles], void 0, React$1.useContext(ThemeContext));
var sheetRef = React$1.useRef();
useInsertionEffectWithLayoutFallback(function() {
var key = cache.key + "-global";
var sheet = new cache.sheet.constructor({
key,
nonce: cache.sheet.nonce,
container: cache.sheet.container,
speedy: cache.sheet.isSpeedy
});
var rehydrating = false;
var node2 = document.querySelector('style[data-emotion="' + key + " " + serialized.name + '"]');
if (cache.sheet.tags.length) {
sheet.before = cache.sheet.tags[0];
}
if (node2 !== null) {
rehydrating = true;
node2.setAttribute("data-emotion", key);
sheet.hydrate([node2]);
}
sheetRef.current = [sheet, rehydrating];
return function() {
sheet.flush();
};
}, [cache]);
useInsertionEffectWithLayoutFallback(function() {
var sheetRefCurrent = sheetRef.current;
var sheet = sheetRefCurrent[0], rehydrating = sheetRefCurrent[1];
if (rehydrating) {
sheetRefCurrent[1] = false;
return;
}
if (serialized.next !== void 0) {
insertStyles(cache, serialized.next, true);
}
if (sheet.tags.length) {
var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;
sheet.before = element;
sheet.flush();
}
cache.insert("", serialized, sheet, false);
}, [cache, serialized.name]);
return null;
});
function css() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return serializeStyles(args);
}
class ErrorBoundary extends React$1.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
return { hasError: true };
}
componentDidCatch(error, info) {
console.error(error, info.componentStack);
}
render() {
if (this.state.hasError) {
return this.props.fallback;
}
return this.props.children;
}
}
var cjsExports = {};
var cjs = {
get exports() {
return cjsExports;
},
set exports(v2) {
cjsExports = v2;
}
};
var Draggable$1 = {};
var propTypesExports = {};
var propTypes = {
get exports() {
return propTypesExports;
},
set exports(v2) {
propTypesExports = v2;
}
};
var ReactPropTypesSecret$1 = "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";
var ReactPropTypesSecret_1 = ReactPropTypesSecret$1;
var ReactPropTypesSecret = ReactPropTypesSecret_1;
function emptyFunction() {
}
function emptyFunctionWithReset() {
}
emptyFunctionWithReset.resetWarningCache = emptyFunction;
var factoryWithThrowingShims = function() {
function shim2(props, propName, componentName, location2, propFullName, secret) {
if (secret === ReactPropTypesSecret) {
return;
}
var err = new Error(
"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types"
);
err.name = "Invariant Violation";
throw err;
}
shim2.isRequired = shim2;
function getShim() {
return shim2;
}
var ReactPropTypes = {
array: shim2,
bigint: shim2,
bool: shim2,
func: shim2,
number: shim2,
object: shim2,
string: shim2,
symbol: shim2,
any: shim2,
arrayOf: getShim,
element: shim2,
elementType: shim2,
instanceOf: getShim,
node: shim2,
objectOf: getShim,
oneOf: getShim,
oneOfType: getShim,
shape: getShim,
exact: getShim,
checkPropTypes: emptyFunctionWithReset,
resetWarningCache: emptyFunction
};
ReactPropTypes.PropTypes = ReactPropTypes;
return ReactPropTypes;
};
{
propTypes.exports = factoryWithThrowingShims();
}
function r$3(e2) {
var t2, f2, n2 = "";
if ("string" == typeof e2 || "number" == typeof e2)
n2 += e2;
else if ("object" == typeof e2)
if (Array.isArray(e2))
for (t2 = 0; t2 < e2.length; t2++)
e2[t2] && (f2 = r$3(e2[t2])) && (n2 && (n2 += " "), n2 += f2);
else
for (t2 in e2)
e2[t2] && (n2 && (n2 += " "), n2 += t2);
return n2;
}
function clsx() {
for (var e2, t2, f2 = 0, n2 = ""; f2 < arguments.length; )
(e2 = arguments[f2++]) && (t2 = r$3(e2)) && (n2 && (n2 += " "), n2 += t2);
return n2;
}
const clsx_m = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
clsx,
default: clsx
}, Symbol.toStringTag, { value: "Module" }));
const require$$3 = /* @__PURE__ */ getAugmentedNamespace(clsx_m);
var domFns = {};
var shims = {};
Object.defineProperty(shims, "__esModule", {
value: true
});
shims.dontSetMe = dontSetMe;
shims.findInArray = findInArray;
shims.int = int;
shims.isFunction = isFunction$1;
shims.isNum = isNum;
function findInArray(array, callback) {
for (var i2 = 0, length2 = array.length; i2 < length2; i2++) {
if (callback.apply(callback, [array[i2], i2, array]))
return array[i2];
}
}
function isFunction$1(func) {
return typeof func === "function" || Object.prototype.toString.call(func) === "[object Function]";
}
function isNum(num) {
return typeof num === "number" && !isNaN(num);
}
function int(a2) {
return parseInt(a2, 10);
}
function dontSetMe(props, propName, componentName) {
if (props[propName]) {
return new Error("Invalid prop ".concat(propName, " passed to ").concat(componentName, " - do not set this, set it on the child."));
}
}
var getPrefix$1 = {};
Object.defineProperty(getPrefix$1, "__esModule", {
value: true
});
getPrefix$1.browserPrefixToKey = browserPrefixToKey;
getPrefix$1.browserPrefixToStyle = browserPrefixToStyle;
getPrefix$1.default = void 0;
getPrefix$1.getPrefix = getPrefix;
var prefixes = ["Moz", "Webkit", "O", "ms"];
function getPrefix() {
var _window$document, _window$document$docu;
var prop = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "transform";
if (typeof window === "undefined")
return "";
var style = (_window$document = window.document) === null || _window$document === void 0 ? void 0 : (_window$document$docu = _window$document.documentElement) === null || _window$document$docu === void 0 ? void 0 : _window$document$docu.style;
if (!style)
return "";
if (prop in style)
return "";
for (var i2 = 0; i2 < prefixes.length; i2++) {
if (browserPrefixToKey(prop, prefixes[i2]) in style)
return prefixes[i2];
}
return "";
}
function browserPrefixToKey(prop, prefix2) {
return prefix2 ? "".concat(prefix2).concat(kebabToTitleCase(prop)) : prop;
}
function browserPrefixToStyle(prop, prefix2) {
return prefix2 ? "-".concat(prefix2.toLowerCase(), "-").concat(prop) : prop;
}
function kebabToTitleCase(str) {
var out = "";
var shouldCapitalize = true;
for (var i2 = 0; i2 < str.length; i2++) {
if (shouldCapitalize) {
out += str[i2].toUpperCase();
shouldCapitalize = false;
} else if (str[i2] === "-") {
shouldCapitalize = true;
} else {
out += str[i2];
}
}
return out;
}
var _default = getPrefix();
getPrefix$1.default = _default;
function _typeof$1(obj) {
"@babel/helpers - typeof";
return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
return typeof obj2;
} : function(obj2) {
return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
}, _typeof$1(obj);
}
Object.defineProperty(domFns, "__esModule", {
value: true
});
domFns.addClassName = addClassName;
domFns.addEvent = addEvent;
domFns.addUserSelectStyles = addUserSelectStyles;
domFns.createCSSTransform = createCSSTransform;
domFns.createSVGTransform = createSVGTransform;
domFns.getTouch = getTouch;
domFns.getTouchIdentifier = getTouchIdentifier;
domFns.getTranslation = getTranslation;
domFns.innerHeight = innerHeight;
domFns.innerWidth = innerWidth;
domFns.matchesSelector = matchesSelector;
domFns.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;
domFns.offsetXYFromParent = offsetXYFromParent;
domFns.outerHeight = outerHeight;
domFns.outerWidth = outerWidth;
domFns.removeClassName = removeClassName;
domFns.removeEvent = removeEvent;
domFns.removeUserSelectStyles = removeUserSelectStyles;
var _shims$2 = shims;
var _getPrefix = _interopRequireWildcard$1(getPrefix$1);
function _getRequireWildcardCache$1(nodeInterop) {
if (typeof WeakMap !== "function")
return null;
var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
return (_getRequireWildcardCache$1 = function _getRequireWildcardCache2(nodeInterop2) {
return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interopRequireWildcard$1(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || _typeof$1(obj) !== "object" && typeof obj !== "function") {
return { default: obj };
}
var cache = _getRequireWildcardCache$1(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i2 = 1; i2 < arguments.length; i2++) {
var source = null != arguments[i2] ? arguments[i2] : {};
i2 % 2 ? ownKeys(Object(source), true).forEach(function(key) {
_defineProperty$1(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _defineProperty$1(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
} else {
obj[key] = value;
}
return obj;
}
var matchesSelectorFunc = "";
function matchesSelector(el, selector) {
if (!matchesSelectorFunc) {
matchesSelectorFunc = (0, _shims$2.findInArray)(["matches", "webkitMatchesSelector", "mozMatchesSelector", "msMatchesSelector", "oMatchesSelector"], function(method) {
return (0, _shims$2.isFunction)(el[method]);
});
}
if (!(0, _shims$2.isFunction)(el[matchesSelectorFunc]))
return false;
return el[matchesSelectorFunc](selector);
}
function matchesSelectorAndParentsTo(el, selector, baseNode) {
var node2 = el;
do {
if (matchesSelector(node2, selector))
return true;
if (node2 === baseNode)
return false;
node2 = node2.parentNode;
} while (node2);
return false;
}
function addEvent(el, event, handler, inputOptions) {
if (!el)
return;
var options = _objectSpread({
capture: true
}, inputOptions);
if (el.addEventListener) {
el.addEventListener(event, handler, options);
} else if (el.attachEvent) {
el.attachEvent("on" + event, handler);
} else {
el["on" + event] = handler;
}
}
function removeEvent(el, event, handler, inputOptions) {
if (!el)
return;
var options = _objectSpread({
capture: true
}, inputOptions);
if (el.removeEventListener) {
el.removeEventListener(event, handler, options);
} else if (el.detachEvent) {
el.detachEvent("on" + event, handler);
} else {
el["on" + event] = null;
}
}
function outerHeight(node2) {
var height = node2.clientHeight;
var computedStyle = node2.ownerDocument.defaultView.getComputedStyle(node2);
height += (0, _shims$2.int)(computedStyle.borderTopWidth);
height += (0, _shims$2.int)(computedStyle.borderBottomWidth);
return height;
}
function outerWidth(node2) {
var width = node2.clientWidth;
var computedStyle = node2.ownerDocument.defaultView.getComputedStyle(node2);
width += (0, _shims$2.int)(computedStyle.borderLeftWidth);
width += (0, _shims$2.int)(computedStyle.borderRightWidth);
return width;
}
function innerHeight(node2) {
var height = node2.clientHeight;
var computedStyle = node2.ownerDocument.defaultView.getComputedStyle(node2);
height -= (0, _shims$2.int)(computedStyle.paddingTop);
height -= (0, _shims$2.int)(computedStyle.paddingBottom);
return height;
}
function innerWidth(node2) {
var width = node2.clientWidth;
var computedStyle = node2.ownerDocument.defaultView.getComputedStyle(node2);
width -= (0, _shims$2.int)(computedStyle.paddingLeft);
width -= (0, _shims$2.int)(computedStyle.paddingRight);
return width;
}
function offsetXYFromParent(evt, offsetParent, scale) {
var isBody = offsetParent === offsetParent.ownerDocument.body;
var offsetParentRect = isBody ? {
left: 0,
top: 0
} : offsetParent.getBoundingClientRect();
var x2 = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;
var y2 = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;
return {
x: x2,
y: y2
};
}
function createCSSTransform(controlPos, positionOffset) {
var translation = getTranslation(controlPos, positionOffset, "px");
return _defineProperty$1({}, (0, _getPrefix.browserPrefixToKey)("transform", _getPrefix.default), translation);
}
function createSVGTransform(controlPos, positionOffset) {
var translation = getTranslation(controlPos, positionOffset, "");
return translation;
}
function getTranslation(_ref2, positionOffset, unitSuffix) {
var x2 = _ref2.x, y2 = _ref2.y;
var translation = "translate(".concat(x2).concat(unitSuffix, ",").concat(y2).concat(unitSuffix, ")");
if (positionOffset) {
var defaultX = "".concat(typeof positionOffset.x === "string" ? positionOffset.x : positionOffset.x + unitSuffix);
var defaultY = "".concat(typeof positionOffset.y === "string" ? positionOffset.y : positionOffset.y + unitSuffix);
translation = "translate(".concat(defaultX, ", ").concat(defaultY, ")") + translation;
}
return translation;
}
function getTouch(e2, identifier2) {
return e2.targetTouches && (0, _shims$2.findInArray)(e2.targetTouches, function(t2) {
return identifier2 === t2.identifier;
}) || e2.changedTouches && (0, _shims$2.findInArray)(e2.changedTouches, function(t2) {
return identifier2 === t2.identifier;
});
}
function getTouchIdentifier(e2) {
if (e2.targetTouches && e2.targetTouches[0])
return e2.targetTouches[0].identifier;
if (e2.changedTouches && e2.changedTouches[0])
return e2.changedTouches[0].identifier;
}
function addUserSelectStyles(doc) {
if (!doc)
return;
var styleEl = doc.getElementById("react-draggable-style-el");
if (!styleEl) {
styleEl = doc.createElement("style");
styleEl.type = "text/css";
styleEl.id = "react-draggable-style-el";
styleEl.innerHTML = ".react-draggable-transparent-selection *::-moz-selection {all: inherit;}\n";
styleEl.innerHTML += ".react-draggable-transparent-selection *::selection {all: inherit;}\n";
doc.getElementsByTagName("head")[0].appendChild(styleEl);
}
if (doc.body)
addClassName(doc.body, "react-draggable-transparent-selection");
}
function removeUserSelectStyles(doc) {
if (!doc)
return;
try {
if (doc.body)
removeClassName(doc.body, "react-draggable-transparent-selection");
if (doc.selection) {
doc.selection.empty();
} else {
var selection = (doc.defaultView || window).getSelection();
if (selection && selection.type !== "Caret") {
selection.removeAllRanges();
}
}
} catch (e2) {
}
}
function addClassName(el, className) {
if (el.classList) {
el.classList.add(className);
} else {
if (!el.className.match(new RegExp("(?:^|\\s)".concat(className, "(?!\\S)")))) {
el.className += " ".concat(className);
}
}
}
function removeClassName(el, className) {
if (el.classList) {
el.classList.remove(className);
} else {
el.className = el.className.replace(new RegExp("(?:^|\\s)".concat(className, "(?!\\S)"), "g"), "");
}
}
var positionFns = {};
Object.defineProperty(positionFns, "__esModule", {
value: true
});
positionFns.canDragX = canDragX;
positionFns.canDragY = canDragY;
positionFns.createCoreData = createCoreData;
positionFns.createDraggableData = createDraggableData;
positionFns.getBoundPosition = getBoundPosition;
positionFns.getControlPosition = getControlPosition;
positionFns.snapToGrid = snapToGrid;
var _shims$1 = shims;
var _domFns$1 = domFns;
function getBoundPosition(draggable, x2, y2) {
if (!draggable.props.bounds)
return [x2, y2];
var bounds = draggable.props.bounds;
bounds = typeof bounds === "string" ? bounds : cloneBounds(bounds);
var node2 = findDOMNode(draggable);
if (typeof bounds === "string") {
var ownerDocument = node2.ownerDocument;
var ownerWindow = ownerDocument.defaultView;
var boundNode;
if (bounds === "parent") {
boundNode = node2.parentNode;
} else {
boundNode = ownerDocument.querySelector(bounds);
}
if (!(boundNode instanceof ownerWindow.HTMLElement)) {
throw new Error('Bounds selector "' + bounds + '" could not find an element.');
}
var boundNodeEl = boundNode;
var nodeStyle = ownerWindow.getComputedStyle(node2);
var boundNodeStyle = ownerWindow.getComputedStyle(boundNodeEl);
bounds = {
left: -node2.offsetLeft + (0, _shims$1.int)(boundNodeStyle.paddingLeft) + (0, _shims$1.int)(nodeStyle.marginLeft),
top: -node2.offsetTop + (0, _shims$1.int)(boundNodeStyle.paddingTop) + (0, _shims$1.int)(nodeStyle.marginTop),
right: (0, _domFns$1.innerWidth)(boundNodeEl) - (0, _domFns$1.outerWidth)(node2) - node2.offsetLeft + (0, _shims$1.int)(boundNodeStyle.paddingRight) - (0, _shims$1.int)(nodeStyle.marginRight),
bottom: (0, _domFns$1.innerHeight)(boundNodeEl) - (0, _domFns$1.outerHeight)(node2) - node2.offsetTop + (0, _shims$1.int)(boundNodeStyle.paddingBottom) - (0, _shims$1.int)(nodeStyle.marginBottom)
};
}
if ((0, _shims$1.isNum)(bounds.right))
x2 = Math.min(x2, bounds.right);
if ((0, _shims$1.isNum)(bounds.bottom))
y2 = Math.min(y2, bounds.bottom);
if ((0, _shims$1.isNum)(bounds.left))
x2 = Math.max(x2, bounds.left);
if ((0, _shims$1.isNum)(bounds.top))
y2 = Math.max(y2, bounds.top);
return [x2, y2];
}
function snapToGrid(grid, pendingX, pendingY) {
var x2 = Math.round(pendingX / grid[0]) * grid[0];
var y2 = Math.round(pendingY / grid[1]) * grid[1];
return [x2, y2];
}
function canDragX(draggable) {
return draggable.props.axis === "both" || draggable.props.axis === "x";
}
function canDragY(draggable) {
return draggable.props.axis === "both" || draggable.props.axis === "y";
}
function getControlPosition(e2, touchIdentifier, draggableCore) {
var touchObj = typeof touchIdentifier === "number" ? (0, _domFns$1.getTouch)(e2, touchIdentifier) : null;
if (typeof touchIdentifier === "number" && !touchObj)
return null;
var node2 = findDOMNode(draggableCore);
var offsetParent = draggableCore.props.offsetParent || node2.offsetParent || node2.ownerDocument.body;
return (0, _domFns$1.offsetXYFromParent)(touchObj || e2, offsetParent, draggableCore.props.scale);
}
function createCoreData(draggable, x2, y2) {
var state = draggable.state;
var isStart = !(0, _shims$1.isNum)(state.lastX);
var node2 = findDOMNode(draggable);
if (isStart) {
return {
node: node2,
deltaX: 0,
deltaY: 0,
lastX: x2,
lastY: y2,
x: x2,
y: y2
};
} else {
return {
node: node2,
deltaX: x2 - state.lastX,
deltaY: y2 - state.lastY,
lastX: state.lastX,
lastY: state.lastY,
x: x2,
y: y2
};
}
}
function createDraggableData(draggable, coreData) {
var scale = draggable.props.scale;
return {
node: coreData.node,
x: draggable.state.x + coreData.deltaX / scale,
y: draggable.state.y + coreData.deltaY / scale,
deltaX: coreData.deltaX / scale,
deltaY: coreData.deltaY / scale,
lastX: draggable.state.x,
lastY: draggable.state.y
};
}
function cloneBounds(bounds) {
return {
left: bounds.left,
top: bounds.top,
right: bounds.right,
bottom: bounds.bottom
};
}
function findDOMNode(draggable) {
var node2 = draggable.findDOMNode();
if (!node2) {
throw new Error(": Unmounted during event!");
}
return node2;
}
var DraggableCore$2 = {};
var log$1 = {};
Object.defineProperty(log$1, "__esModule", {
value: true
});
log$1.default = log;
function log() {
}
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
return typeof obj2;
} : function(obj2) {
return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
}, _typeof(obj);
}
Object.defineProperty(DraggableCore$2, "__esModule", {
value: true
});
DraggableCore$2.default = void 0;
var React2 = _interopRequireWildcard(React$1);
var _propTypes = _interopRequireDefault(propTypesExports);
var _reactDom = _interopRequireDefault(require$$2);
var _domFns = domFns;
var _positionFns = positionFns;
var _shims = shims;
var _log = _interopRequireDefault(log$1);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function")
return null;
var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
return (_getRequireWildcardCache = function _getRequireWildcardCache2(nodeInterop2) {
return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interopRequireWildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {
return { default: obj };
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
function _slicedToArray(arr, i2) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i2) || _unsupportedIterableToArray(arr, i2) || _nonIterableRest();
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _unsupportedIterableToArray(o2, minLen) {
if (!o2)
return;
if (typeof o2 === "string")
return _arrayLikeToArray(o2, minLen);
var n2 = Object.prototype.toString.call(o2).slice(8, -1);
if (n2 === "Object" && o2.constructor)
n2 = o2.constructor.name;
if (n2 === "Map" || n2 === "Set")
return Array.from(o2);
if (n2 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n2))
return _arrayLikeToArray(o2, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length)
len = arr.length;
for (var i2 = 0, arr2 = new Array(len); i2 < len; i2++) {
arr2[i2] = arr[i2];
}
return arr2;
}
function _iterableToArrayLimit(arr, i2) {
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
if (_i == null)
return;
var _arr = [];
var _n2 = true;
var _d = false;
var _s, _e2;
try {
for (_i = _i.call(arr); !(_n2 = (_s = _i.next()).done); _n2 = true) {
_arr.push(_s.value);
if (i2 && _arr.length === i2)
break;
}
} catch (err) {
_d = true;
_e2 = err;
} finally {
try {
if (!_n2 && _i["return"] != null)
_i["return"]();
} finally {
if (_d)
throw _e2;
}
}
return _arr;
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr))
return arr;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i2 = 0; i2 < props.length; i2++) {
var descriptor = props[i2];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor)
descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps)
_defineProperties(Constructor.prototype, protoProps);
if (staticProps)
_defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", { writable: false });
return Constructor;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });
Object.defineProperty(subClass, "prototype", { writable: false });
if (superClass)
_setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o2, p2) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o3, p3) {
o3.__proto__ = p3;
return o3;
};
return _setPrototypeOf(o2, p2);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived), result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
function _possibleConstructorReturn(self2, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(self2);
}
function _assertThisInitialized(self2) {
if (self2 === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self2;
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct)
return false;
if (Reflect.construct.sham)
return false;
if (typeof Proxy === "function")
return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
}));
return true;
} catch (e2) {
return false;
}
}
function _getPrototypeOf(o2) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o3) {
return o3.__proto__ || Object.getPrototypeOf(o3);
};
return _getPrototypeOf(o2);
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
} else {
obj[key] = value;
}
return obj;
}
var eventsFor = {
touch: {
start: "touchstart",
move: "touchmove",
stop: "touchend"
},
mouse: {
start: "mousedown",
move: "mousemove",
stop: "mouseup"
}
};
var dragEventFor = eventsFor.mouse;
var DraggableCore$1 = /* @__PURE__ */ function(_React$Component) {
_inherits(DraggableCore2, _React$Component);
var _super = _createSuper(DraggableCore2);
function DraggableCore2() {
var _this;
_classCallCheck(this, DraggableCore2);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
_defineProperty(_assertThisInitialized(_this), "state", {
dragging: false,
// Used while dragging to determine deltas.
lastX: NaN,
lastY: NaN,
touchIdentifier: null
});
_defineProperty(_assertThisInitialized(_this), "mounted", false);
_defineProperty(_assertThisInitialized(_this), "handleDragStart", function(e2) {
_this.props.onMouseDown(e2);
if (!_this.props.allowAnyClick && typeof e2.button === "number" && e2.button !== 0)
return false;
var thisNode = _this.findDOMNode();
if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {
throw new Error(" not mounted on DragStart!");
}
var ownerDocument = thisNode.ownerDocument;
if (_this.props.disabled || !(e2.target instanceof ownerDocument.defaultView.Node) || _this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e2.target, _this.props.handle, thisNode) || _this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e2.target, _this.props.cancel, thisNode)) {
return;
}
if (e2.type === "touchstart")
e2.preventDefault();
var touchIdentifier = (0, _domFns.getTouchIdentifier)(e2);
_this.setState({
touchIdentifier
});
var position2 = (0, _positionFns.getControlPosition)(e2, touchIdentifier, _assertThisInitialized(_this));
if (position2 == null)
return;
var x2 = position2.x, y2 = position2.y;
var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x2, y2);
(0, _log.default)("DraggableCore: handleDragStart: %j", coreEvent);
(0, _log.default)("calling", _this.props.onStart);
var shouldUpdate = _this.props.onStart(e2, coreEvent);
if (shouldUpdate === false || _this.mounted === false)
return;
if (_this.props.enableUserSelectHack)
(0, _domFns.addUserSelectStyles)(ownerDocument);
_this.setState({
dragging: true,
lastX: x2,
lastY: y2
});
(0, _domFns.addEvent)(ownerDocument, dragEventFor.move, _this.handleDrag);
(0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, _this.handleDragStop);
});
_defineProperty(_assertThisInitialized(_this), "handleDrag", function(e2) {
var position2 = (0, _positionFns.getControlPosition)(e2, _this.state.touchIdentifier, _assertThisInitialized(_this));
if (position2 == null)
return;
var x2 = position2.x, y2 = position2.y;
if (Array.isArray(_this.props.grid)) {
var deltaX = x2 - _this.state.lastX, deltaY = y2 - _this.state.lastY;
var _snapToGrid = (0, _positionFns.snapToGrid)(_this.props.grid, deltaX, deltaY);
var _snapToGrid2 = _slicedToArray(_snapToGrid, 2);
deltaX = _snapToGrid2[0];
deltaY = _snapToGrid2[1];
if (!deltaX && !deltaY)
return;
x2 = _this.state.lastX + deltaX, y2 = _this.state.lastY + deltaY;
}
var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x2, y2);
(0, _log.default)("DraggableCore: handleDrag: %j", coreEvent);
var shouldUpdate = _this.props.onDrag(e2, coreEvent);
if (shouldUpdate === false || _this.mounted === false) {
try {
_this.handleDragStop(new MouseEvent("mouseup"));
} catch (err) {
var event = document.createEvent("MouseEvents");
event.initMouseEvent("mouseup", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
_this.handleDragStop(event);
}
return;
}
_this.setState({
lastX: x2,
lastY: y2
});
});
_defineProperty(_assertThisInitialized(_this), "handleDragStop", function(e2) {
if (!_this.state.dragging)
return;
var position2 = (0, _positionFns.getControlPosition)(e2, _this.state.touchIdentifier, _assertThisInitialized(_this));
if (position2 == null)
return;
var x2 = position2.x, y2 = position2.y;
if (Array.isArray(_this.props.grid)) {
var deltaX = x2 - _this.state.lastX || 0;
var deltaY = y2 - _this.state.lastY || 0;
var _snapToGrid3 = (0, _positionFns.snapToGrid)(_this.props.grid, deltaX, deltaY);
var _snapToGrid4 = _slicedToArray(_snapToGrid3, 2);
deltaX = _snapToGrid4[0];
deltaY = _snapToGrid4[1];
x2 = _this.state.lastX + deltaX, y2 = _this.state.lastY + deltaY;
}
var coreEvent = (0, _positionFns.createCoreData)(_assertThisInitialized(_this), x2, y2);
var shouldContinue = _this.props.onStop(e2, coreEvent);
if (shouldContinue === false || _this.mounted === false)
return false;
var thisNode = _this.findDOMNode();
if (thisNode) {
if (_this.props.enableUserSelectHack)
(0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);
}
(0, _log.default)("DraggableCore: handleDragStop: %j", coreEvent);
_this.setState({
dragging: false,
lastX: NaN,
lastY: NaN
});
if (thisNode) {
(0, _log.default)("DraggableCore: Removing handlers");
(0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, _this.handleDrag);
(0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, _this.handleDragStop);
}
});
_defineProperty(_assertThisInitialized(_this), "onMouseDown", function(e2) {
dragEventFor = eventsFor.mouse;
return _this.handleDragStart(e2);
});
_defineProperty(_assertThisInitialized(_this), "onMouseUp", function(e2) {
dragEventFor = eventsFor.mouse;
return _this.handleDragStop(e2);
});
_defineProperty(_assertThisInitialized(_this), "onTouchStart", function(e2) {
dragEventFor = eventsFor.touch;
return _this.handleDragStart(e2);
});
_defineProperty(_assertThisInitialized(_this), "onTouchEnd", function(e2) {
dragEventFor = eventsFor.touch;
return _this.handleDragStop(e2);
});
return _this;
}
_createClass(DraggableCore2, [{
key: "componentDidMount",
value: function componentDidMount() {
this.mounted = true;
var thisNode = this.findDOMNode();
if (thisNode) {
(0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {
passive: false
});
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.mounted = false;
var thisNode = this.findDOMNode();
if (thisNode) {
var ownerDocument = thisNode.ownerDocument;
(0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);
(0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);
(0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);
(0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);
(0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {
passive: false
});
if (this.props.enableUserSelectHack)
(0, _domFns.removeUserSelectStyles)(ownerDocument);
}
}
// React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find
// the underlying DOM node ourselves. See the README for more information.
}, {
key: "findDOMNode",
value: function findDOMNode2() {
var _this$props, _this$props2, _this$props2$nodeRef;
return (_this$props = this.props) !== null && _this$props !== void 0 && _this$props.nodeRef ? (_this$props2 = this.props) === null || _this$props2 === void 0 ? void 0 : (_this$props2$nodeRef = _this$props2.nodeRef) === null || _this$props2$nodeRef === void 0 ? void 0 : _this$props2$nodeRef.current : _reactDom.default.findDOMNode(this);
}
}, {
key: "render",
value: function render() {
return /* @__PURE__ */ React2.cloneElement(React2.Children.only(this.props.children), {
// Note: mouseMove handler is attached to document so it will still function
// when the user drags quickly and leaves the bounds of the element.
onMouseDown: this.onMouseDown,
onMouseUp: this.onMouseUp,
// onTouchStart is added on `componentDidMount` so they can be added with
// {passive: false}, which allows it to cancel. See
// https://developers.google.com/web/updates/2017/01/scrolling-intervention
onTouchEnd: this.onTouchEnd
});
}
}]);
return DraggableCore2;
}(React2.Component);
DraggableCore$2.default = DraggableCore$1;
_defineProperty(DraggableCore$1, "displayName", "DraggableCore");
_defineProperty(DraggableCore$1, "propTypes", {
/**
* `allowAnyClick` allows dragging using any mouse button.
* By default, we only accept the left button.
*
* Defaults to `false`.
*/
allowAnyClick: _propTypes.default.bool,
/**
* `disabled`, if true, stops the from dragging. All handlers,
* with the exception of `onMouseDown`, will not fire.
*/
disabled: _propTypes.default.bool,
/**
* By default, we add 'user-select:none' attributes to the document body
* to prevent ugly text selection during drag. If this is causing problems
* for your app, set this to `false`.
*/
enableUserSelectHack: _propTypes.default.bool,
/**
* `offsetParent`, if set, uses the passed DOM node to compute drag offsets
* instead of using the parent node.
*/
offsetParent: function offsetParent(props, propName) {
if (props[propName] && props[propName].nodeType !== 1) {
throw new Error("Draggable's offsetParent must be a DOM Node.");
}
},
/**
* `grid` specifies the x and y that dragging should snap to.
*/
grid: _propTypes.default.arrayOf(_propTypes.default.number),
/**
* `handle` specifies a selector to be used as the handle that initiates drag.
*
* Example:
*
* ```jsx
* let App = React.createClass({
* render: function () {
* return (
*
*
*
Click me to drag
*
This is some other content
*
*
* );
* }
* });
* ```
*/
handle: _propTypes.default.string,
/**
* `cancel` specifies a selector to be used to prevent drag initialization.
*
* Example:
*
* ```jsx
* let App = React.createClass({
* render: function () {
* return(
*
*
*
You can't drag from here
*
Dragging here works fine
*
*
* );
* }
* });
* ```
*/
cancel: _propTypes.default.string,
/* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.
* Unfortunately, in order for to work properly, we need raw access
* to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`
* as in this example:
*
* function MyComponent() {
* const nodeRef = React.useRef(null);
* return (
*
*
Example Target
*
* );
* }
*
* This can be used for arbitrarily nested components, so long as the ref ends up
* pointing to the actual child DOM node and not a custom component.
*/
nodeRef: _propTypes.default.object,
/**
* Called when dragging starts.
* If this function returns the boolean false, dragging will be canceled.
*/
onStart: _propTypes.default.func,
/**
* Called while dragging.
* If this function returns the boolean false, dragging will be canceled.
*/
onDrag: _propTypes.default.func,
/**
* Called when dragging stops.
* If this function returns the boolean false, the drag will remain active.
*/
onStop: _propTypes.default.func,
/**
* A workaround option which can be passed if onMouseDown needs to be accessed,
* since it'll always be blocked (as there is internal use of onMouseDown)
*/
onMouseDown: _propTypes.default.func,
/**
* `scale`, if set, applies scaling while dragging an element
*/
scale: _propTypes.default.number,
/**
* These properties should be defined on the child, not here.
*/
className: _shims.dontSetMe,
style: _shims.dontSetMe,
transform: _shims.dontSetMe
});
_defineProperty(DraggableCore$1, "defaultProps", {
allowAnyClick: false,
// by default only accept left click
disabled: false,
enableUserSelectHack: true,
onStart: function onStart() {
},
onDrag: function onDrag() {
},
onStop: function onStop() {
},
onMouseDown: function onMouseDown() {
},
scale: 1
});
(function(exports) {
function _typeof2(obj) {
"@babel/helpers - typeof";
return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
return typeof obj2;
} : function(obj2) {
return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
}, _typeof2(obj);
}
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "DraggableCore", {
enumerable: true,
get: function get() {
return _DraggableCore.default;
}
});
exports.default = void 0;
var React3 = _interopRequireWildcard2(React$1);
var _propTypes2 = _interopRequireDefault2(propTypesExports);
var _reactDom2 = _interopRequireDefault2(require$$2);
var _clsx2 = _interopRequireDefault2(require$$3);
var _domFns2 = domFns;
var _positionFns2 = positionFns;
var _shims2 = shims;
var _DraggableCore = _interopRequireDefault2(DraggableCore$2);
var _log2 = _interopRequireDefault2(log$1);
var _excluded = ["axis", "bounds", "children", "defaultPosition", "defaultClassName", "defaultClassNameDragging", "defaultClassNameDragged", "position", "positionOffset", "scale"];
function _interopRequireDefault2(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
function _getRequireWildcardCache2(nodeInterop) {
if (typeof WeakMap !== "function")
return null;
var cacheBabelInterop = /* @__PURE__ */ new WeakMap();
var cacheNodeInterop = /* @__PURE__ */ new WeakMap();
return (_getRequireWildcardCache2 = function _getRequireWildcardCache3(nodeInterop2) {
return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interopRequireWildcard2(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || _typeof2(obj) !== "object" && typeof obj !== "function") {
return { default: obj };
}
var cache = _getRequireWildcardCache2(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
function _extends2() {
_extends2 = Object.assign || function(target) {
for (var i2 = 1; i2 < arguments.length; i2++) {
var source = arguments[i2];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends2.apply(this, arguments);
}
function _objectWithoutProperties(source, excluded) {
if (source == null)
return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i2;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i2 = 0; i2 < sourceSymbolKeys.length; i2++) {
key = sourceSymbolKeys[i2];
if (excluded.indexOf(key) >= 0)
continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key))
continue;
target[key] = source[key];
}
}
return target;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null)
return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i2;
for (i2 = 0; i2 < sourceKeys.length; i2++) {
key = sourceKeys[i2];
if (excluded.indexOf(key) >= 0)
continue;
target[key] = source[key];
}
return target;
}
function ownKeys2(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i2 = 1; i2 < arguments.length; i2++) {
var source = null != arguments[i2] ? arguments[i2] : {};
i2 % 2 ? ownKeys2(Object(source), true).forEach(function(key) {
_defineProperty2(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys2(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _slicedToArray2(arr, i2) {
return _arrayWithHoles2(arr) || _iterableToArrayLimit2(arr, i2) || _unsupportedIterableToArray2(arr, i2) || _nonIterableRest2();
}
function _nonIterableRest2() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _unsupportedIterableToArray2(o2, minLen) {
if (!o2)
return;
if (typeof o2 === "string")
return _arrayLikeToArray2(o2, minLen);
var n2 = Object.prototype.toString.call(o2).slice(8, -1);
if (n2 === "Object" && o2.constructor)
n2 = o2.constructor.name;
if (n2 === "Map" || n2 === "Set")
return Array.from(o2);
if (n2 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n2))
return _arrayLikeToArray2(o2, minLen);
}
function _arrayLikeToArray2(arr, len) {
if (len == null || len > arr.length)
len = arr.length;
for (var i2 = 0, arr2 = new Array(len); i2 < len; i2++) {
arr2[i2] = arr[i2];
}
return arr2;
}
function _iterableToArrayLimit2(arr, i2) {
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
if (_i == null)
return;
var _arr = [];
var _n2 = true;
var _d = false;
var _s, _e2;
try {
for (_i = _i.call(arr); !(_n2 = (_s = _i.next()).done); _n2 = true) {
_arr.push(_s.value);
if (i2 && _arr.length === i2)
break;
}
} catch (err) {
_d = true;
_e2 = err;
} finally {
try {
if (!_n2 && _i["return"] != null)
_i["return"]();
} finally {
if (_d)
throw _e2;
}
}
return _arr;
}
function _arrayWithHoles2(arr) {
if (Array.isArray(arr))
return arr;
}
function _classCallCheck2(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties2(target, props) {
for (var i2 = 0; i2 < props.length; i2++) {
var descriptor = props[i2];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor)
descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass2(Constructor, protoProps, staticProps) {
if (protoProps)
_defineProperties2(Constructor.prototype, protoProps);
if (staticProps)
_defineProperties2(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", { writable: false });
return Constructor;
}
function _inherits2(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });
Object.defineProperty(subClass, "prototype", { writable: false });
if (superClass)
_setPrototypeOf2(subClass, superClass);
}
function _setPrototypeOf2(o2, p2) {
_setPrototypeOf2 = Object.setPrototypeOf || function _setPrototypeOf3(o3, p3) {
o3.__proto__ = p3;
return o3;
};
return _setPrototypeOf2(o2, p2);
}
function _createSuper2(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct2();
return function _createSuperInternal() {
var Super = _getPrototypeOf2(Derived), result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf2(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn2(this, result);
};
}
function _possibleConstructorReturn2(self2, call) {
if (call && (_typeof2(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized2(self2);
}
function _assertThisInitialized2(self2) {
if (self2 === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self2;
}
function _isNativeReflectConstruct2() {
if (typeof Reflect === "undefined" || !Reflect.construct)
return false;
if (Reflect.construct.sham)
return false;
if (typeof Proxy === "function")
return true;
try {
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {
}));
return true;
} catch (e2) {
return false;
}
}
function _getPrototypeOf2(o2) {
_getPrototypeOf2 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf3(o3) {
return o3.__proto__ || Object.getPrototypeOf(o3);
};
return _getPrototypeOf2(o2);
}
function _defineProperty2(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
} else {
obj[key] = value;
}
return obj;
}
var Draggable2 = /* @__PURE__ */ function(_React$Component) {
_inherits2(Draggable3, _React$Component);
var _super = _createSuper2(Draggable3);
function Draggable3(props) {
var _this;
_classCallCheck2(this, Draggable3);
_this = _super.call(this, props);
_defineProperty2(_assertThisInitialized2(_this), "onDragStart", function(e2, coreData) {
(0, _log2.default)("Draggable: onDragStart: %j", coreData);
var shouldStart = _this.props.onStart(e2, (0, _positionFns2.createDraggableData)(_assertThisInitialized2(_this), coreData));
if (shouldStart === false)
return false;
_this.setState({
dragging: true,
dragged: true
});
});
_defineProperty2(_assertThisInitialized2(_this), "onDrag", function(e2, coreData) {
if (!_this.state.dragging)
return false;
(0, _log2.default)("Draggable: onDrag: %j", coreData);
var uiData = (0, _positionFns2.createDraggableData)(_assertThisInitialized2(_this), coreData);
var newState = {
x: uiData.x,
y: uiData.y
};
if (_this.props.bounds) {
var x2 = newState.x, y2 = newState.y;
newState.x += _this.state.slackX;
newState.y += _this.state.slackY;
var _getBoundPosition = (0, _positionFns2.getBoundPosition)(_assertThisInitialized2(_this), newState.x, newState.y), _getBoundPosition2 = _slicedToArray2(_getBoundPosition, 2), newStateX = _getBoundPosition2[0], newStateY = _getBoundPosition2[1];
newState.x = newStateX;
newState.y = newStateY;
newState.slackX = _this.state.slackX + (x2 - newState.x);
newState.slackY = _this.state.slackY + (y2 - newState.y);
uiData.x = newState.x;
uiData.y = newState.y;
uiData.deltaX = newState.x - _this.state.x;
uiData.deltaY = newState.y - _this.state.y;
}
var shouldUpdate = _this.props.onDrag(e2, uiData);
if (shouldUpdate === false)
return false;
_this.setState(newState);
});
_defineProperty2(_assertThisInitialized2(_this), "onDragStop", function(e2, coreData) {
if (!_this.state.dragging)
return false;
var shouldContinue = _this.props.onStop(e2, (0, _positionFns2.createDraggableData)(_assertThisInitialized2(_this), coreData));
if (shouldContinue === false)
return false;
(0, _log2.default)("Draggable: onDragStop: %j", coreData);
var newState = {
dragging: false,
slackX: 0,
slackY: 0
};
var controlled = Boolean(_this.props.position);
if (controlled) {
var _this$props$position = _this.props.position, x2 = _this$props$position.x, y2 = _this$props$position.y;
newState.x = x2;
newState.y = y2;
}
_this.setState(newState);
});
_this.state = {
// Whether or not we are currently dragging.
dragging: false,
// Whether or not we have been dragged before.
dragged: false,
// Current transform x and y.
x: props.position ? props.position.x : props.defaultPosition.x,
y: props.position ? props.position.y : props.defaultPosition.y,
prevPropsPosition: _objectSpread2({}, props.position),
// Used for compensating for out-of-bounds drags
slackX: 0,
slackY: 0,
// Can only determine if SVG after mounting
isElementSVG: false
};
if (props.position && !(props.onDrag || props.onStop)) {
console.warn("A `position` was applied to this , without drag handlers. This will make this component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the `position` of this element.");
}
return _this;
}
_createClass2(Draggable3, [{
key: "componentDidMount",
value: function componentDidMount() {
if (typeof window.SVGElement !== "undefined" && this.findDOMNode() instanceof window.SVGElement) {
this.setState({
isElementSVG: true
});
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.setState({
dragging: false
});
}
// React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find
// the underlying DOM node ourselves. See the README for more information.
}, {
key: "findDOMNode",
value: function findDOMNode2() {
var _this$props$nodeRef$c, _this$props, _this$props$nodeRef;
return (_this$props$nodeRef$c = (_this$props = this.props) === null || _this$props === void 0 ? void 0 : (_this$props$nodeRef = _this$props.nodeRef) === null || _this$props$nodeRef === void 0 ? void 0 : _this$props$nodeRef.current) !== null && _this$props$nodeRef$c !== void 0 ? _this$props$nodeRef$c : _reactDom2.default.findDOMNode(this);
}
}, {
key: "render",
value: function render() {
var _clsx;
var _this$props2 = this.props;
_this$props2.axis;
_this$props2.bounds;
var children = _this$props2.children, defaultPosition = _this$props2.defaultPosition, defaultClassName = _this$props2.defaultClassName, defaultClassNameDragging = _this$props2.defaultClassNameDragging, defaultClassNameDragged = _this$props2.defaultClassNameDragged, position2 = _this$props2.position, positionOffset = _this$props2.positionOffset;
_this$props2.scale;
var draggableCoreProps = _objectWithoutProperties(_this$props2, _excluded);
var style = {};
var svgTransform = null;
var controlled = Boolean(position2);
var draggable = !controlled || this.state.dragging;
var validPosition = position2 || defaultPosition;
var transformOpts = {
// Set left if horizontal drag is enabled
x: (0, _positionFns2.canDragX)(this) && draggable ? this.state.x : validPosition.x,
// Set top if vertical drag is enabled
y: (0, _positionFns2.canDragY)(this) && draggable ? this.state.y : validPosition.y
};
if (this.state.isElementSVG) {
svgTransform = (0, _domFns2.createSVGTransform)(transformOpts, positionOffset);
} else {
style = (0, _domFns2.createCSSTransform)(transformOpts, positionOffset);
}
var className = (0, _clsx2.default)(children.props.className || "", defaultClassName, (_clsx = {}, _defineProperty2(_clsx, defaultClassNameDragging, this.state.dragging), _defineProperty2(_clsx, defaultClassNameDragged, this.state.dragged), _clsx));
return /* @__PURE__ */ React3.createElement(_DraggableCore.default, _extends2({}, draggableCoreProps, {
onStart: this.onDragStart,
onDrag: this.onDrag,
onStop: this.onDragStop
}), /* @__PURE__ */ React3.cloneElement(React3.Children.only(children), {
className,
style: _objectSpread2(_objectSpread2({}, children.props.style), style),
transform: svgTransform
}));
}
}], [{
key: "getDerivedStateFromProps",
value: (
// React 16.3+
// Arity (props, state)
function getDerivedStateFromProps(_ref, _ref2) {
var position2 = _ref.position;
var prevPropsPosition = _ref2.prevPropsPosition;
if (position2 && (!prevPropsPosition || position2.x !== prevPropsPosition.x || position2.y !== prevPropsPosition.y)) {
(0, _log2.default)("Draggable: getDerivedStateFromProps %j", {
position: position2,
prevPropsPosition
});
return {
x: position2.x,
y: position2.y,
prevPropsPosition: _objectSpread2({}, position2)
};
}
return null;
}
)
}]);
return Draggable3;
}(React3.Component);
exports.default = Draggable2;
_defineProperty2(Draggable2, "displayName", "Draggable");
_defineProperty2(Draggable2, "propTypes", _objectSpread2(_objectSpread2({}, _DraggableCore.default.propTypes), {}, {
/**
* `axis` determines which axis the draggable can move.
*
* Note that all callbacks will still return data as normal. This only
* controls flushing to the DOM.
*
* 'both' allows movement horizontally and vertically.
* 'x' limits movement to horizontal axis.
* 'y' limits movement to vertical axis.
* 'none' limits all movement.
*
* Defaults to 'both'.
*/
axis: _propTypes2.default.oneOf(["both", "x", "y", "none"]),
/**
* `bounds` determines the range of movement available to the element.
* Available values are:
*
* 'parent' restricts movement within the Draggable's parent node.
*
* Alternatively, pass an object with the following properties, all of which are optional:
*
* {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}
*
* All values are in px.
*
* Example:
*
* ```jsx
* let App = React.createClass({
* render: function () {
* return (
*
*
Content
*
* );
* }
* });
* ```
*/
bounds: _propTypes2.default.oneOfType([_propTypes2.default.shape({
left: _propTypes2.default.number,
right: _propTypes2.default.number,
top: _propTypes2.default.number,
bottom: _propTypes2.default.number
}), _propTypes2.default.string, _propTypes2.default.oneOf([false])]),
defaultClassName: _propTypes2.default.string,
defaultClassNameDragging: _propTypes2.default.string,
defaultClassNameDragged: _propTypes2.default.string,
/**
* `defaultPosition` specifies the x and y that the dragged item should start at
*
* Example:
*
* ```jsx
* let App = React.createClass({
* render: function () {
* return (
*
*
I start with transformX: 25px and transformY: 25px;
*
* );
* }
* });
* ```
*/
defaultPosition: _propTypes2.default.shape({
x: _propTypes2.default.number,
y: _propTypes2.default.number
}),
positionOffset: _propTypes2.default.shape({
x: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),
y: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string])
}),
/**
* `position`, if present, defines the current position of the element.
*
* This is similar to how form elements in React work - if no `position` is supplied, the component
* is uncontrolled.
*
* Example:
*
* ```jsx
* let App = React.createClass({
* render: function () {
* return (
*
*
I start with transformX: 25px and transformY: 25px;