diff --git a/.DS_Store b/.DS_Store index 522f33c..73839c7 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/backend/mindmap.db b/backend/mindmap.db index fe4c924..08c3c36 100644 Binary files a/backend/mindmap.db and b/backend/mindmap.db differ diff --git a/frontend/.DS_Store b/frontend/.DS_Store new file mode 100644 index 0000000..435e640 Binary files /dev/null and b/frontend/.DS_Store differ diff --git a/frontend/node_modules/.vite/deps/@viselect_vanilla.js b/frontend/node_modules/.vite/deps/@viselect_vanilla.js deleted file mode 100644 index 167e6e4..0000000 --- a/frontend/node_modules/.vite/deps/@viselect_vanilla.js +++ /dev/null @@ -1,470 +0,0 @@ -import "./chunk-FOSKEDPS.js"; - -// src/lib/mind-elixir/node_modules/@viselect/vanilla/dist/viselect.mjs -var X = class { - constructor() { - this._listeners = /* @__PURE__ */ new Map(), this.on = this.addEventListener, this.off = this.removeEventListener, this.emit = this.dispatchEvent; - } - addEventListener(e, t) { - const s = this._listeners.get(e) ?? /* @__PURE__ */ new Set(); - return this._listeners.set(e, s), s.add(t), this; - } - removeEventListener(e, t) { - var s; - return (s = this._listeners.get(e)) == null || s.delete(t), this; - } - dispatchEvent(e, ...t) { - let s = true; - for (const i of this._listeners.get(e) ?? []) - s = i(...t) !== false && s; - return s; - } - unbindAllListeners() { - this._listeners.clear(); - } -}; -var L = (l, e = "px") => typeof l == "number" ? l + e : l; -var y = ({ style: l }, e, t) => { - if (typeof e == "object") - for (const [s, i] of Object.entries(e)) - i !== void 0 && (l[s] = L(i)); - else - t !== void 0 && (l[e] = L(t)); -}; -var M = (l = 0, e = 0, t = 0, s = 0) => { - const i = { x: l, y: e, width: t, height: s, top: e, left: l, right: l + t, bottom: e + s }; - return { ...i, toJSON: () => JSON.stringify(i) }; -}; -var Y = (l) => { - let e, t = -1, s = false; - return { - next: (...i) => { - e = i, s || (s = true, t = requestAnimationFrame(() => { - l(...e), s = false; - })); - }, - cancel: () => { - cancelAnimationFrame(t), s = false; - } - }; -}; -var k = (l, e, t = "touch") => { - switch (t) { - case "center": { - const s = e.left + e.width / 2, i = e.top + e.height / 2; - return s >= l.left && s <= l.right && i >= l.top && i <= l.bottom; - } - case "cover": - return e.left >= l.left && e.top >= l.top && e.right <= l.right && e.bottom <= l.bottom; - case "touch": - return l.right >= e.left && l.left <= e.right && l.bottom >= e.top && l.top <= e.bottom; - } -}; -var H = () => matchMedia("(hover: none), (pointer: coarse)").matches; -var N = () => "safari" in window; -var A = (l) => Array.isArray(l) ? l : [l]; -var O = (l) => (e, t, s, i = {}) => { - (e instanceof HTMLCollection || e instanceof NodeList) && (e = Array.from(e)), t = A(t), e = A(e); - for (const o of e) - if (o) - for (const n of t) - o[l](n, s, { capture: false, ...i }); -}; -var S = O("addEventListener"); -var g = O("removeEventListener"); -var x = (l) => { - var i; - const { clientX: e, clientY: t, target: s } = ((i = l.touches) == null ? void 0 : i[0]) ?? l; - return { x: e, y: t, target: s }; -}; -var E = (l, e = document) => A(l).map( - (t) => typeof t == "string" ? Array.from(e.querySelectorAll(t)) : t instanceof Element ? t : null -).flat().filter(Boolean); -var q = (l, e) => e.some((t) => typeof t == "number" ? l.button === t : typeof t == "object" ? t.button !== l.button ? false : t.modifiers.every((s) => { - switch (s) { - case "alt": - return l.altKey; - case "ctrl": - return l.ctrlKey || l.metaKey; - case "shift": - return l.shiftKey; - } -}) : false); -var { abs: b, max: C, min: B, ceil: R } = Math; -var D = (l = []) => ({ - stored: l, - selected: [], - touched: [], - changed: { added: [], removed: [] } -}); -var T = class T2 extends X { - constructor(e) { - var o, n, r, a, u; - super(), this._selection = D(), this._targetBoundaryScrolled = true, this._selectables = [], this._areaLocation = { y1: 0, x2: 0, y2: 0, x1: 0 }, this._areaRect = M(), this._singleClick = true, this._scrollAvailable = true, this._scrollingActive = false, this._scrollSpeed = { x: 0, y: 0 }, this._scrollDelta = { x: 0, y: 0 }, this._lastMousePosition = { x: 0, y: 0 }, this.enable = this._toggleStartEvents, this.disable = this._toggleStartEvents.bind(this, false), this._options = { - selectionAreaClass: "selection-area", - selectionContainerClass: void 0, - selectables: [], - document: window.document, - startAreas: ["html"], - boundaries: ["html"], - container: "body", - ...e, - behaviour: { - overlap: "invert", - intersect: "touch", - triggers: [0], - ...e.behaviour, - startThreshold: (o = e.behaviour) != null && o.startThreshold ? typeof e.behaviour.startThreshold == "number" ? e.behaviour.startThreshold : { x: 10, y: 10, ...e.behaviour.startThreshold } : { x: 10, y: 10 }, - scrolling: { - speedDivider: 10, - manualSpeed: 750, - ...(n = e.behaviour) == null ? void 0 : n.scrolling, - startScrollMargins: { - x: 0, - y: 0, - ...(a = (r = e.behaviour) == null ? void 0 : r.scrolling) == null ? void 0 : a.startScrollMargins - } - } - }, - features: { - range: true, - touch: true, - deselectOnBlur: false, - ...e.features, - singleTap: { - allow: true, - intersect: "native", - ...(u = e.features) == null ? void 0 : u.singleTap - } - } - }; - for (const _ of Object.getOwnPropertyNames(Object.getPrototypeOf(this))) - typeof this[_] == "function" && (this[_] = this[_].bind(this)); - const { document: t, selectionAreaClass: s, selectionContainerClass: i } = this._options; - this._area = t.createElement("div"), this._clippingElement = t.createElement("div"), this._clippingElement.appendChild(this._area), this._area.classList.add(s), i && this._clippingElement.classList.add(i), y(this._area, { - willChange: "top, left, bottom, right, width, height", - top: 0, - left: 0, - position: "fixed" - }), y(this._clippingElement, { - overflow: "hidden", - position: "fixed", - transform: "translate3d(0, 0, 0)", - // https://stackoverflow.com/a/38268846 - pointerEvents: "none", - zIndex: "1" - }), this._frame = Y((_) => { - this._recalculateSelectionAreaRect(), this._updateElementSelection(), this._emitEvent("move", _), this._redrawSelectionArea(); - }), this.enable(); - } - _toggleStartEvents(e = true) { - const { document: t, features: s } = this._options, i = e ? S : g; - i(t, "mousedown", this._onTapStart), s.touch && i(t, "touchstart", this._onTapStart, { passive: false }); - } - _onTapStart(e, t = false) { - const { x: s, y: i, target: o } = x(e), { document: n, startAreas: r, boundaries: a, features: u, behaviour: _ } = this._options, c = o.getBoundingClientRect(); - if (e instanceof MouseEvent && !q(e, _.triggers)) - return; - const p = E(r, n), m = E(a, n); - this._targetElement = m.find( - (v) => k(v.getBoundingClientRect(), c) - ); - const f = e.composedPath(), d = p.find((v) => f.includes(v)); - if (this._targetBoundary = m.find((v) => f.includes(v)), !this._targetElement || !d || !this._targetBoundary || !t && this._emitEvent("beforestart", e) === false) - return; - this._areaLocation = { x1: s, y1: i, x2: 0, y2: 0 }; - const h = n.scrollingElement ?? n.body; - this._scrollDelta = { x: h.scrollLeft, y: h.scrollTop }, this._singleClick = true, this.clearSelection(false, true), S(n, ["touchmove", "mousemove"], this._delayedTapMove, { passive: false }), S(n, ["mouseup", "touchcancel", "touchend"], this._onTapStop), S(n, "scroll", this._onScroll), u.deselectOnBlur && (this._targetBoundaryScrolled = false, S(this._targetBoundary, "scroll", this._onStartAreaScroll)); - } - _onSingleTap(e) { - const { singleTap: { intersect: t }, range: s } = this._options.features, i = x(e); - let o; - if (t === "native") - o = i.target; - else if (t === "touch") { - this.resolveSelectables(); - const { x: r, y: a } = i; - o = this._selectables.find((u) => { - const { right: _, left: c, top: p, bottom: m } = u.getBoundingClientRect(); - return r < _ && r > c && a < m && a > p; - }); - } - if (!o) - return; - for (this.resolveSelectables(); !this._selectables.includes(o); ) - if (o.parentElement) - o = o.parentElement; - else { - this._targetBoundaryScrolled || this.clearSelection(); - return; - } - const { stored: n } = this._selection; - if (this._emitEvent("start", e), e.shiftKey && s && this._latestElement) { - const r = this._latestElement, [a, u] = r.compareDocumentPosition(o) & 4 ? [o, r] : [r, o], _ = [...this._selectables.filter( - (c) => c.compareDocumentPosition(a) & 4 && c.compareDocumentPosition(u) & 2 - ), a, u]; - this.select(_), this._latestElement = r; - } else - n.includes(o) && (n.length === 1 || e.ctrlKey || n.every((r) => this._selection.stored.includes(r))) ? this.deselect(o) : (this.select(o), this._latestElement = o); - } - _delayedTapMove(e) { - const { container: t, document: s, behaviour: { startThreshold: i } } = this._options, { x1: o, y1: n } = this._areaLocation, { x: r, y: a } = x(e); - if ( - // Single number for both coordinates - typeof i == "number" && b(r + a - (o + n)) >= i || // Different x and y threshold - typeof i == "object" && b(r - o) >= i.x || b(a - n) >= i.y - ) { - if (g(s, ["mousemove", "touchmove"], this._delayedTapMove, { passive: false }), this._emitEvent("beforedrag", e) === false) { - g(s, ["mouseup", "touchcancel", "touchend"], this._onTapStop); - return; - } - S(s, ["mousemove", "touchmove"], this._onTapMove, { passive: false }), y(this._area, "display", "block"), E(t, s)[0].appendChild(this._clippingElement), this.resolveSelectables(), this._singleClick = false, this._targetRect = this._targetElement.getBoundingClientRect(), this._scrollAvailable = this._targetElement.scrollHeight !== this._targetElement.clientHeight || this._targetElement.scrollWidth !== this._targetElement.clientWidth, this._scrollAvailable && (S(this._targetElement, "wheel", this._wheelScroll, { passive: false }), S(this._options.document, "keydown", this._keyboardScroll, { passive: false }), this._selectables = this._selectables.filter((u) => this._targetElement.contains(u))), this._setupSelectionArea(), this._emitEvent("start", e), this._onTapMove(e); - } - this._handleMoveEvent(e); - } - _setupSelectionArea() { - const { _clippingElement: e, _targetElement: t, _area: s } = this, i = this._targetRect = t.getBoundingClientRect(); - this._scrollAvailable ? (y(e, { - top: i.top, - left: i.left, - width: i.width, - height: i.height - }), y(s, { - marginTop: -i.top, - marginLeft: -i.left - })) : (y(e, { - top: 0, - left: 0, - width: "100%", - height: "100%" - }), y(s, { - marginTop: 0, - marginLeft: 0 - })); - } - _onTapMove(e) { - const { _scrollSpeed: t, _areaLocation: s, _options: i, _frame: o } = this, { speedDivider: n } = i.behaviour.scrolling, r = this._targetElement, { x: a, y: u } = x(e); - if (s.x2 = a, s.y2 = u, this._lastMousePosition.x = a, this._lastMousePosition.y = u, this._scrollAvailable && !this._scrollingActive && (t.y || t.x)) { - this._scrollingActive = true; - const _ = () => { - if (!t.x && !t.y) { - this._scrollingActive = false; - return; - } - const { scrollTop: c, scrollLeft: p } = r; - t.y && (r.scrollTop += R(t.y / n), s.y1 -= r.scrollTop - c), t.x && (r.scrollLeft += R(t.x / n), s.x1 -= r.scrollLeft - p), o.next(e), requestAnimationFrame(_); - }; - requestAnimationFrame(_); - } else - o.next(e); - this._handleMoveEvent(e); - } - _handleMoveEvent(e) { - const { features: t } = this._options; - (t.touch && H() || this._scrollAvailable && N()) && e.preventDefault(); - } - _onScroll() { - const { _scrollDelta: e, _options: { document: t } } = this, { scrollTop: s, scrollLeft: i } = t.scrollingElement ?? t.body; - this._areaLocation.x1 += e.x - i, this._areaLocation.y1 += e.y - s, e.x = i, e.y = s, this._setupSelectionArea(), this._frame.next(null); - } - _onStartAreaScroll() { - this._targetBoundaryScrolled = true, g(this._targetElement, "scroll", this._onStartAreaScroll); - } - _wheelScroll(e) { - const { manualSpeed: t } = this._options.behaviour.scrolling, s = e.deltaY ? e.deltaY > 0 ? 1 : -1 : 0, i = e.deltaX ? e.deltaX > 0 ? 1 : -1 : 0; - this._scrollSpeed.y += s * t, this._scrollSpeed.x += i * t, this._onTapMove(e), e.preventDefault(); - } - _keyboardScroll(e) { - const { manualSpeed: t } = this._options.behaviour.scrolling, s = e.key === "ArrowLeft" ? -1 : e.key === "ArrowRight" ? 1 : 0, i = e.key === "ArrowUp" ? -1 : e.key === "ArrowDown" ? 1 : 0; - this._scrollSpeed.x += Math.sign(s) * t, this._scrollSpeed.y += Math.sign(i) * t, e.preventDefault(), this._onTapMove({ - clientX: this._lastMousePosition.x, - clientY: this._lastMousePosition.y, - preventDefault: () => { - } - }); - } - _recalculateSelectionAreaRect() { - const { _scrollSpeed: e, _areaLocation: t, _targetElement: s, _options: i } = this, { scrollTop: o, scrollHeight: n, clientHeight: r, scrollLeft: a, scrollWidth: u, clientWidth: _ } = s, c = this._targetRect, { x1: p, y1: m } = t; - let { x2: f, y2: d } = t; - const { behaviour: { scrolling: { startScrollMargins: h } } } = i; - f < c.left + h.x ? (e.x = a ? -b(c.left - f + h.x) : 0, f = f < c.left ? c.left : f) : f > c.right - h.x ? (e.x = u - a - _ ? b(c.left + c.width - f - h.x) : 0, f = f > c.right ? c.right : f) : e.x = 0, d < c.top + h.y ? (e.y = o ? -b(c.top - d + h.y) : 0, d = d < c.top ? c.top : d) : d > c.bottom - h.y ? (e.y = n - o - r ? b(c.top + c.height - d - h.y) : 0, d = d > c.bottom ? c.bottom : d) : e.y = 0; - const v = B(p, f), w = B(m, d), j = C(p, f), K = C(m, d); - this._areaRect = M(v, w, j - v, K - w); - } - _redrawSelectionArea() { - const { x: e, y: t, width: s, height: i } = this._areaRect, { style: o } = this._area; - o.left = `${e}px`, o.top = `${t}px`, o.width = `${s}px`, o.height = `${i}px`; - } - _onTapStop(e, t) { - var n; - const { document: s, features: i } = this._options, { _singleClick: o } = this; - g(this._targetElement, "scroll", this._onStartAreaScroll), g(s, ["mousemove", "touchmove"], this._delayedTapMove), g(s, ["touchmove", "mousemove"], this._onTapMove), g(s, ["mouseup", "touchcancel", "touchend"], this._onTapStop), g(s, "scroll", this._onScroll), this._keepSelection(), e && o && i.singleTap.allow ? this._onSingleTap(e) : !o && !t && (this._updateElementSelection(), this._emitEvent("stop", e)), this._scrollSpeed.x = 0, this._scrollSpeed.y = 0, g(this._targetElement, "wheel", this._wheelScroll, { passive: true }), g(this._options.document, "keydown", this._keyboardScroll, { passive: true }), this._clippingElement.remove(), (n = this._frame) == null || n.cancel(), y(this._area, "display", "none"); - } - _updateElementSelection() { - const { _selectables: e, _options: t, _selection: s, _areaRect: i } = this, { stored: o, selected: n, touched: r } = s, { intersect: a, overlap: u } = t.behaviour, _ = u === "invert", c = [], p = [], m = []; - for (let d = 0; d < e.length; d++) { - const h = e[d]; - if (k(i, h.getBoundingClientRect(), a)) { - if (n.includes(h)) - o.includes(h) && !r.includes(h) && r.push(h); - else if (_ && o.includes(h)) { - m.push(h); - continue; - } else - p.push(h); - c.push(h); - } - } - _ && p.push(...o.filter((d) => !n.includes(d))); - const f = u === "keep"; - for (let d = 0; d < n.length; d++) { - const h = n[d]; - !c.includes(h) && !// Check if the user wants to keep previously selected elements, e.g., - // not make them part of the current selection as soon as they're touched. - (f && o.includes(h)) && m.push(h); - } - s.selected = c, s.changed = { added: p, removed: m }, this._latestElement = void 0; - } - _emitEvent(e, t) { - return this.emit(e, { - event: t, - store: this._selection, - selection: this - }); - } - _keepSelection() { - const { _options: e, _selection: t } = this, { selected: s, changed: i, touched: o, stored: n } = t, r = s.filter((a) => !n.includes(a)); - switch (e.behaviour.overlap) { - case "drop": { - t.stored = [ - ...r, - ...n.filter((a) => !o.includes(a)) - // Elements not touched - ]; - break; - } - case "invert": { - t.stored = [ - ...r, - ...n.filter((a) => !i.removed.includes(a)) - // Elements not removed from selection - ]; - break; - } - case "keep": { - t.stored = [ - ...n, - ...s.filter((a) => !n.includes(a)) - // Newly added - ]; - break; - } - } - } - /** - * Manually triggers the start of a selection - * @param evt A MouseEvent / TouchEvent-like object - * @param silent If beforestart should be fired - */ - trigger(e, t = true) { - this._onTapStart(e, t); - } - /** - * Can be used if during a selection elements have been added - * Will update everything that can be selected - */ - resolveSelectables() { - this._selectables = E(this._options.selectables, this._options.document); - } - /** - * Same as deselecting, but for all elements currently selected - * @param includeStored If the store should also get cleared - * @param quiet If move / stop events should be fired - */ - clearSelection(e = true, t = false) { - const { selected: s, stored: i, changed: o } = this._selection; - o.added = [], o.removed.push( - ...s, - ...e ? i : [] - ), t || (this._emitEvent("move", null), this._emitEvent("stop", null)), this._selection = D(e ? [] : i); - } - /** - * @returns {Array} Selected elements - */ - getSelection() { - return this._selection.stored; - } - /** - * @returns {HTMLElement} The selection area element - */ - getSelectionArea() { - return this._area; - } - /** - * @returns {Element[]} Available selectable elements for current selection - */ - getSelectables() { - return this._selectables; - } - /** - * Set the location of the selection area - * @param location A partial AreaLocation object - */ - setAreaLocation(e) { - Object.assign(this._areaLocation, e), this._redrawSelectionArea(); - } - /** - * @returns {AreaLocation} The current location of the selection area - */ - getAreaLocation() { - return this._areaLocation; - } - /** - * Cancel the current selection process, pass true to fire a stop event after cancel - * @param keepEvent If a stop event should be fired - */ - cancel(e = false) { - this._onTapStop(null, !e); - } - /** - * Unbinds all events and removes the area-element. - */ - destroy() { - this.cancel(), this.disable(), this._clippingElement.remove(), super.unbindAllListeners(); - } - /** - * Adds elements to the selection - * @param query CSS Query, can be an array of queries - * @param quiet If this should not trigger the move event - */ - select(e, t = false) { - const { changed: s, selected: i, stored: o } = this._selection, n = E(e, this._options.document).filter( - (r) => !i.includes(r) && !o.includes(r) - ); - return o.push(...n), i.push(...n), s.added.push(...n), s.removed = [], this._latestElement = void 0, t || (this._emitEvent("move", null), this._emitEvent("stop", null)), n; - } - /** - * Removes a particular element from the selection - * @param query CSS Query, can be an array of queries - * @param quiet If this should not trigger the move event - */ - deselect(e, t = false) { - const { selected: s, stored: i, changed: o } = this._selection, n = E(e, this._options.document).filter( - (r) => s.includes(r) || i.includes(r) - ); - this._selection.stored = i.filter((r) => !n.includes(r)), this._selection.selected = s.filter((r) => !n.includes(r)), this._selection.changed.added = [], this._selection.changed.removed.push( - ...n.filter((r) => !o.removed.includes(r)) - ), this._latestElement = void 0, t || (this._emitEvent("move", null), this._emitEvent("stop", null)); - } -}; -T.version = "3.9.0"; -var P = T; -export { - P as default -}; -/*! Bundled license information: - -@viselect/vanilla/dist/viselect.mjs: - (*! @viselect/vanilla v3.9.0 MIT | https://github.com/Simonwep/selection/tree/master/packages/vanilla *) -*/ -//# sourceMappingURL=@viselect_vanilla.js.map diff --git a/frontend/node_modules/.vite/deps/@viselect_vanilla.js.map b/frontend/node_modules/.vite/deps/@viselect_vanilla.js.map deleted file mode 100644 index 10f389a..0000000 --- a/frontend/node_modules/.vite/deps/@viselect_vanilla.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/EventEmitter.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/css.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/domRect.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/frames.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/intersects.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/browser.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/arrayify.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/events.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/selectAll.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/utils/matchesTrigger.ts", "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/src/index.ts"], - "sourcesContent": ["\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype AnyFunction = (...args: any[]) => any;\ntype EventMap = Record;\n\nexport class EventTarget {\n private readonly _listeners = new Map>();\n\n public addEventListener(event: K, cb: Events[K]): this {\n const set = this._listeners.get(event) ?? new Set();\n this._listeners.set(event, set);\n set.add(cb as AnyFunction);\n return this;\n }\n\n public removeEventListener(event: K, cb: Events[K]): this {\n this._listeners.get(event)?.delete(cb as AnyFunction);\n return this;\n }\n\n public dispatchEvent(event: K, ...data: Parameters): boolean {\n let ok = true;\n for (const cb of (this._listeners.get(event) ?? [])) {\n ok = (cb(...data) !== false) && ok;\n }\n\n return ok;\n }\n\n public unbindAllListeners(): void {\n this._listeners.clear();\n }\n\n // Let's also support on, off and emit like node\n public on = this.addEventListener;\n public off = this.removeEventListener;\n public emit = this.dispatchEvent;\n}\n", "const unitify = (val: string | number, unit = 'px'): string => {\n return typeof val === 'number' ? val + unit : val;\n};\n\n/**\n * Add css to a DOM-Element or returns the current\n * value of a property.\n *\n * @param el The Element.\n * @param attr The attribute or an object which holds css key-properties.\n * @param val The value for a single attribute.\n * @returns {*}\n */\nexport const css = ({style}: HTMLElement, attr: Partial> | string, val?: string | number): void => {\n if (typeof attr === 'object') {\n for (const [key, value] of Object.entries(attr)) {\n if (value !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style[key as any] = unitify(value);\n }\n }\n } else if (val !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style[attr as any] = unitify(val);\n }\n};\n\n", "// Polyfill for DOMRect as happy-dom and jsdom don't support it\nexport const domRect = (x = 0, y = 0, width = 0, height = 0): DOMRect => {\n const rect = {x, y, width, height, top: y, left: x, right: x + width, bottom: y + height};\n const toJSON = () => JSON.stringify(rect);\n return {...rect, toJSON};\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\ntype AnyFunction = (...args: any[]) => void;\n\nexport interface Frames {\n next(...args: Parameters): void;\n\n cancel(): void;\n}\n\nexport const frames = (fn: F): Frames => {\n let previousArgs: Parameters;\n let frameId = -1;\n let lock = false;\n\n return {\n next: (...args: Parameters): void => {\n previousArgs = args;\n\n if (!lock) {\n lock = true;\n frameId = requestAnimationFrame(() => {\n fn(...previousArgs);\n lock = false;\n });\n }\n },\n cancel: () => {\n cancelAnimationFrame(frameId);\n lock = false;\n }\n };\n};\n", "export type Intersection = 'center' | 'cover' | 'touch'\n\n/**\n * Check if two DOM-Elements intersects each other.\n * @param a BoundingClientRect of the first element.\n * @param b BoundingClientRect of the second element.\n * @param mode Options are center, cover or touch.\n * @returns {boolean} If both elements intersects each other.\n */\nexport const intersects = (a: DOMRect, b: DOMRect, mode: Intersection = 'touch'): boolean => {\n switch (mode) {\n case 'center': {\n const bxc = b.left + b.width / 2;\n const byc = b.top + b.height / 2;\n\n return bxc >= a.left &&\n bxc <= a.right &&\n byc >= a.top &&\n byc <= a.bottom;\n }\n case 'cover': {\n return b.left >= a.left &&\n b.top >= a.top &&\n b.right <= a.right &&\n b.bottom <= a.bottom;\n }\n case 'touch': {\n return a.right >= b.left &&\n a.left <= b.right &&\n a.bottom >= b.top &&\n a.top <= b.bottom;\n }\n }\n};\n", "// Determines if the device's primary input supports touch\n// See this article: https://css-tricks.com/touch-devices-not-judged-size/\nexport const isTouchDevice = (): boolean => matchMedia('(hover: none), (pointer: coarse)').matches;\n\n// Determines if the browser is safari\nexport const isSafariBrowser = (): boolean => 'safari' in window;\n", "// Turns a value into an array if it's not already an array\nexport const arrayify = (value: T | T[]): T[] => (Array.isArray(value) ? value : [value]);\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {arrayify} from './arrayify';\n\ntype Method = 'addEventListener' | 'removeEventListener';\ntype AnyFunction = (...arg: any) => any;\n\nconst eventListener = (method: Method) => (\n items: (EventTarget | undefined) | (EventTarget | undefined)[],\n events: string | string[],\n fn: AnyFunction,\n options = {}\n) => {\n\n // Normalize array\n if (items instanceof HTMLCollection || items instanceof NodeList) {\n items = Array.from(items);\n }\n\n events = arrayify(events)\n items = arrayify(items);\n\n for (const el of items) {\n if (el) {\n for (const ev of events) {\n el[method](ev, fn as EventListener, {capture: false, ...options});\n }\n }\n }\n};\n\n/**\n * Add event(s) to element(s).\n * @param elements DOM-Elements\n * @param events Event names\n * @param fn Callback\n * @param options Optional options\n * @return Array passed arguments\n */\nexport const on = eventListener('addEventListener');\n\n/**\n * Remove event(s) from element(s).\n * @param elements DOM-Elements\n * @param events Event names\n * @param fn Callback\n * @param options Optional options\n * @return Array passed arguments\n */\nexport const off = eventListener('removeEventListener');\n\n/**\n * Simplifies a touch / mouse-event\n * @param evt\n */\nexport const simplifyEvent = (evt: any): {\n target: HTMLElement;\n x: number;\n y: number;\n} => {\n const {clientX, clientY, target} = evt.touches?.[0] ?? evt;\n return {x: clientX, y: clientY, target};\n};\n", "import {arrayify} from './arrayify';\n\nexport type SelectAllSelectors = (string | Element)[] | string | Element;\n\n/**\n * Takes a selector (or array of selectors) and returns the matched nodes.\n * @param selector The selector or an Array of selectors.\n * @param doc\n * @returns {Array} Array of DOM-Nodes.\n */\nexport const selectAll = (selector: SelectAllSelectors, doc: Document = document): Element[] =>\n arrayify(selector)\n .map(item =>\n typeof item === 'string'\n ? Array.from(doc.querySelectorAll(item))\n : item instanceof Element\n ? item\n : null\n )\n .flat()\n .filter(Boolean) as Element[];\n", "\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button#value\nexport type MouseButton = 0 // Main\n | 1 // Auxiliary\n | 2 // Secondary\n | 3 // Fourth\n | 4; // Fifth\n\nexport type Modifier = 'ctrl'\n | 'alt'\n | 'shift';\n\nexport type Trigger = MouseButton | MouseButtonWithModifiers;\n\nexport type MouseButtonWithModifiers = {\n button: MouseButton,\n modifiers: Modifier[]\n};\n\n/**\n * Determines whether a MouseEvent should execute until completion depending on\n * which button and modifier(s) are active for the MouseEvent.\n * The Event will execute to completion if ANY of the triggers \"matches\"\n * @param event MouseEvent that should be checked\n * @param triggers A list of Triggers that signify that the event should execute until completion\n * @returns Whether the MouseEvent should execute until completion\n */\nexport const matchesTrigger = (event: MouseEvent, triggers: Trigger[]): boolean =>\n triggers.some((trigger) => {\n\n // The trigger requires only a specific button to be pressed\n if (typeof trigger === 'number') {\n return event.button === trigger;\n }\n\n // The trigger requires a specific button to be pressed AND some modifiers\n if (typeof trigger === 'object') {\n if (trigger.button !== event.button) {\n return false;\n }\n\n return trigger.modifiers.every((modifier) => {\n switch (modifier) {\n case 'alt':\n return event.altKey;\n case 'ctrl':\n return event.ctrlKey || event.metaKey;\n case 'shift':\n return event.shiftKey;\n }\n });\n }\n\n return false;\n });\n", "import {EventTarget} from './EventEmitter';\nimport type {AreaLocation, Coordinates, ScrollEvent, SelectionEvents, SelectionOptions, SelectionStore} from './types';\nimport {PartialSelectionOptions} from './types';\nimport {css} from './utils/css';\nimport {domRect} from './utils/domRect';\nimport {Frames, frames} from './utils/frames';\nimport {intersects} from './utils/intersects';\nimport {isSafariBrowser, isTouchDevice} from './utils/browser';\nimport {on, off, simplifyEvent} from './utils/events';\nimport {selectAll, SelectAllSelectors} from './utils/selectAll';\nimport {matchesTrigger} from './utils/matchesTrigger';\n\n// Re-export types\nexport * from './types';\n\n// Some var shorting for better compression and readability\nconst {abs, max, min, ceil} = Math;\n\nconst makeSelectionStore = (stored: Element[] = []): SelectionStore => ({\n stored,\n selected: [],\n touched: [],\n changed: {added: [], removed: []}\n});\n\nexport default class SelectionArea extends EventTarget {\n public static version = VERSION;\n\n // Options\n private readonly _options: SelectionOptions;\n\n // Selection store\n private _selection: SelectionStore = makeSelectionStore();\n\n // Area element and clipping element\n private readonly _area: HTMLElement;\n private readonly _clippingElement: HTMLElement;\n\n // Target container (element) and boundary (cached)\n private _targetElement?: Element;\n private _targetBoundary?: Element;\n private _targetBoundaryScrolled = true;\n private _targetRect?: DOMRect;\n private _selectables: Element[] = [];\n private _latestElement?: Element;\n\n // Dynamically constructed area rect\n private _areaLocation: AreaLocation = {y1: 0, x2: 0, y2: 0, x1: 0};\n private _areaRect = domRect();\n\n // If a single click is being performed, it's a single-click until the user dragged the mouse\n private _singleClick = true;\n private _frame: Frames;\n\n // Required data for scrolling\n private _scrollAvailable = true;\n private _scrollingActive = false;\n private _scrollSpeed: Coordinates = {x: 0, y: 0};\n private _scrollDelta: Coordinates = {x: 0, y: 0};\n\n // Required for keydown scrolling\n private _lastMousePosition = {x: 0, y: 0};\n\n constructor(opt: PartialSelectionOptions) {\n super();\n\n this._options = {\n selectionAreaClass: 'selection-area',\n selectionContainerClass: undefined,\n selectables: [],\n document: window.document,\n startAreas: ['html'],\n boundaries: ['html'],\n container: 'body',\n ...opt,\n\n behaviour: {\n overlap: 'invert',\n intersect: 'touch',\n triggers: [0],\n ...opt.behaviour,\n startThreshold: opt.behaviour?.startThreshold ?\n typeof opt.behaviour.startThreshold === 'number' ?\n opt.behaviour.startThreshold :\n {x: 10, y: 10, ...opt.behaviour.startThreshold} : {x: 10, y: 10},\n scrolling: {\n speedDivider: 10,\n manualSpeed: 750,\n ...opt.behaviour?.scrolling,\n startScrollMargins: {\n x: 0,\n y: 0,\n ...opt.behaviour?.scrolling?.startScrollMargins,\n }\n }\n },\n\n features: {\n range: true,\n touch: true,\n deselectOnBlur: false,\n ...opt.features,\n singleTap: {\n allow: true,\n intersect: 'native',\n ...opt.features?.singleTap,\n }\n }\n };\n\n // Bind locale functions to instance\n /* eslint-disable @typescript-eslint/no-explicit-any */\n for (const key of Object.getOwnPropertyNames(Object.getPrototypeOf(this))) {\n if (typeof (this as any)[key] === 'function') {\n (this as any)[key] = (this as any)[key].bind(this);\n }\n }\n\n const {document, selectionAreaClass, selectionContainerClass} = this._options;\n this._area = document.createElement('div');\n this._clippingElement = document.createElement('div');\n this._clippingElement.appendChild(this._area);\n\n this._area.classList.add(selectionAreaClass);\n\n if (selectionContainerClass) {\n this._clippingElement.classList.add(selectionContainerClass);\n }\n\n css(this._area, {\n willChange: 'top, left, bottom, right, width, height',\n top: 0,\n left: 0,\n position: 'fixed'\n });\n\n css(this._clippingElement, {\n overflow: 'hidden',\n position: 'fixed',\n transform: 'translate3d(0, 0, 0)', // https://stackoverflow.com/a/38268846\n pointerEvents: 'none',\n zIndex: '1'\n });\n\n this._frame = frames((evt: MouseEvent | TouchEvent) => {\n this._recalculateSelectionAreaRect();\n this._updateElementSelection();\n this._emitEvent('move', evt);\n this._redrawSelectionArea();\n });\n\n this.enable();\n }\n\n _toggleStartEvents(activate = true): void {\n const {document, features} = this._options;\n const fn = activate ? on : off;\n\n fn(document, 'mousedown', this._onTapStart);\n\n if (features.touch) {\n fn(document, 'touchstart', this._onTapStart, {passive: false});\n }\n }\n\n _onTapStart(evt: MouseEvent | TouchEvent, silent = false): void {\n const {x, y, target} = simplifyEvent(evt);\n const {document, startAreas, boundaries, features, behaviour} = this._options;\n const targetBoundingClientRect = target.getBoundingClientRect();\n\n if (evt instanceof MouseEvent && !matchesTrigger(evt, behaviour.triggers)) {\n return;\n }\n\n // Find start-areas and boundaries\n const resolvedStartAreas = selectAll(startAreas, document);\n const resolvedBoundaries = selectAll(boundaries, document);\n\n // Check in which container the user currently acts\n this._targetElement = resolvedBoundaries.find(el =>\n intersects(el.getBoundingClientRect(), targetBoundingClientRect)\n );\n\n // Check if the area starts in one of the start areas / boundaries\n const evtPath = evt.composedPath();\n const targetStartArea = resolvedStartAreas.find(el => evtPath.includes(el));\n this._targetBoundary = resolvedBoundaries.find(el => evtPath.includes(el));\n\n if (!this._targetElement || !targetStartArea || !this._targetBoundary) {\n return;\n }\n\n if (!silent && this._emitEvent('beforestart', evt) === false) {\n return;\n }\n\n this._areaLocation = {x1: x, y1: y, x2: 0, y2: 0};\n\n // Lock scrolling in the target container\n const scrollElement = document.scrollingElement ?? document.body;\n this._scrollDelta = {x: scrollElement.scrollLeft, y: scrollElement.scrollTop};\n\n // To detect single-click\n this._singleClick = true;\n this.clearSelection(false, true);\n\n on(document, ['touchmove', 'mousemove'], this._delayedTapMove, {passive: false});\n on(document, ['mouseup', 'touchcancel', 'touchend'], this._onTapStop);\n on(document, 'scroll', this._onScroll);\n\n if (features.deselectOnBlur) {\n this._targetBoundaryScrolled = false;\n on(this._targetBoundary, 'scroll', this._onStartAreaScroll);\n }\n }\n\n _onSingleTap(evt: MouseEvent | TouchEvent): void {\n const {singleTap: {intersect}, range} = this._options.features;\n const e = simplifyEvent(evt);\n let target;\n\n if (intersect === 'native') {\n target = e.target;\n } else if (intersect === 'touch') {\n this.resolveSelectables();\n\n const {x, y} = e;\n target = this._selectables.find(v => {\n const {right, left, top, bottom} = v.getBoundingClientRect();\n return x < right && x > left && y < bottom && y > top;\n });\n }\n\n if (!target) {\n return;\n }\n\n /**\n * Resolve selectables again.\n * If the user started in a scrollable area, they will be reduced\n * to the current area. Prevent the exclusion of these if a range-selection\n * gets performed.\n */\n this.resolveSelectables();\n\n // Traverse dom upwards to check if the target is selectable\n while (!this._selectables.includes(target)) {\n if (target.parentElement) {\n target = target.parentElement;\n } else {\n if (!this._targetBoundaryScrolled) {\n this.clearSelection();\n }\n\n return;\n }\n\n }\n\n // Grab the current store first in case it gets set back\n const {stored} = this._selection;\n this._emitEvent('start', evt);\n\n if (evt.shiftKey && range && this._latestElement) {\n const reference = this._latestElement;\n\n // Resolve the correct range\n const [preceding, following] = reference.compareDocumentPosition(target) & 4 ?\n [target, reference] : [reference, target];\n\n const rangeItems = [...this._selectables.filter(el =>\n (el.compareDocumentPosition(preceding) & 4) &&\n (el.compareDocumentPosition(following) & 2)\n ), preceding, following];\n\n this.select(rangeItems);\n this._latestElement = reference; // the latestElement is by default cleared in .select()\n } else if (\n stored.includes(target) && (\n stored.length === 1 || evt.ctrlKey ||\n stored.every(v => this._selection.stored.includes(v))\n )\n ) {\n this.deselect(target);\n } else {\n this.select(target);\n this._latestElement = target;\n }\n }\n\n _delayedTapMove(evt: MouseEvent | TouchEvent): void {\n const {container, document, behaviour: {startThreshold}} = this._options;\n const {x1, y1} = this._areaLocation; // Coordinates of the first \"tap\"\n const {x, y} = simplifyEvent(evt);\n\n // Check the pixel threshold\n if (\n\n // Single number for both coordinates\n (typeof startThreshold === 'number' && abs((x + y) - (x1 + y1)) >= startThreshold) ||\n\n // Different x and y threshold\n (typeof startThreshold === 'object' && abs(x - x1) >= (startThreshold as Coordinates).x || abs(y - y1) >= (startThreshold as Coordinates).y)\n ) {\n off(document, ['mousemove', 'touchmove'], this._delayedTapMove, {passive: false});\n\n if (this._emitEvent('beforedrag', evt) === false) {\n off(document, ['mouseup', 'touchcancel', 'touchend'], this._onTapStop);\n return;\n }\n\n on(document, ['mousemove', 'touchmove'], this._onTapMove, {passive: false});\n\n // Make area element visible\n css(this._area, 'display', 'block');\n\n // Append selection-area to the dom\n selectAll(container, document)[0].appendChild(this._clippingElement);\n\n this.resolveSelectables();\n\n // An action is recognized as single-select until the user performed a multi-selection\n this._singleClick = false;\n\n // Just saving the boundaries of this container for later\n this._targetRect = this._targetElement!.getBoundingClientRect();\n\n // Find a container and check if it's scrollable\n this._scrollAvailable =\n this._targetElement!.scrollHeight !== this._targetElement!.clientHeight ||\n this._targetElement!.scrollWidth !== this._targetElement!.clientWidth;\n\n if (this._scrollAvailable) {\n\n // Detect mouse scrolling\n on(this._targetElement, 'wheel', this._wheelScroll, {passive: false});\n\n // Detect keyboard scrolling\n on(this._options.document, 'keydown', this._keyboardScroll, {passive: false});\n\n\n /**\n * The selection-area will also cover another element\n * out of the current scrollable parent. So find all elements\n * that are in the current scrollable element. Now these are\n * the only selectables instead of all.\n */\n this._selectables = this._selectables.filter(s => this._targetElement!.contains(s));\n }\n\n // Re-setup selection area and fire event\n this._setupSelectionArea();\n this._emitEvent('start', evt);\n this._onTapMove(evt);\n }\n\n this._handleMoveEvent(evt);\n }\n\n _setupSelectionArea(): void {\n const {_clippingElement, _targetElement, _area} = this;\n const tr = this._targetRect = _targetElement!.getBoundingClientRect();\n\n if (this._scrollAvailable) {\n\n /**\n * To clip the area, the selection area has a parent\n * which has exactly the same dimensions as the scrollable element.\n * Now if the area exceeds these boundaries, it will be cropped.\n */\n css(_clippingElement, {\n top: tr.top,\n left: tr.left,\n width: tr.width,\n height: tr.height\n });\n\n /**\n * The area element is relative to the clipping element,\n * but when this is moved or transformed, we need to correct\n * the positions via a negative margin.\n */\n css(_area, {\n marginTop: -tr.top,\n marginLeft: -tr.left\n });\n } else {\n\n // \"Reset\" styles\n css(_clippingElement, {\n top: 0,\n left: 0,\n width: '100%',\n height: '100%'\n });\n\n css(_area, {\n marginTop: 0,\n marginLeft: 0\n });\n }\n }\n\n _onTapMove(evt: MouseEvent | TouchEvent): void {\n const {_scrollSpeed, _areaLocation, _options, _frame} = this;\n const {speedDivider} = _options.behaviour.scrolling;\n const _targetElement = this._targetElement as Element;\n\n const {x, y} = simplifyEvent(evt);\n _areaLocation.x2 = x;\n _areaLocation.y2 = y;\n\n this._lastMousePosition.x = x;\n this._lastMousePosition.y = y;\n\n if (this._scrollAvailable && !this._scrollingActive && (_scrollSpeed.y || _scrollSpeed.x)) {\n\n // Continuous scrolling\n this._scrollingActive = true;\n\n const scroll = () => {\n if (!_scrollSpeed.x && !_scrollSpeed.y) {\n this._scrollingActive = false;\n return;\n }\n\n // Reduce velocity, use ceil in both directions to scroll at least 1px per frame\n const {scrollTop, scrollLeft} = _targetElement;\n\n if (_scrollSpeed.y) {\n _targetElement.scrollTop += ceil(_scrollSpeed.y / speedDivider);\n _areaLocation.y1 -= _targetElement.scrollTop - scrollTop;\n }\n\n if (_scrollSpeed.x) {\n _targetElement.scrollLeft += ceil(_scrollSpeed.x / speedDivider);\n _areaLocation.x1 -= _targetElement.scrollLeft - scrollLeft;\n }\n\n /**\n * We changed the start coordinates -> redraw the selection-area\n * We changed the dimensions of the area element -> re-calc selected elements\n * The selected elements array has been changed -> fire event\n */\n _frame.next(evt);\n\n // Keep scrolling even if the user stops to move his pointer\n requestAnimationFrame(scroll);\n };\n\n requestAnimationFrame(scroll);\n } else {\n\n /**\n * Perform redrawing only if scrolling is not active.\n * If scrolling is active, this area is getting re-dragged by the\n * anonymize scroll function.\n */\n _frame.next(evt);\n }\n\n this._handleMoveEvent(evt);\n }\n\n _handleMoveEvent(evt: MouseEvent | TouchEvent) {\n const {features} = this._options;\n\n /**\n * - Prevent auto-refresh for when pulling down on touch devices.\n * - Prevent auto-scroll by the browser when on safari, and scrolling is handled by this library.\n */\n if ((features.touch && isTouchDevice()) || (this._scrollAvailable && isSafariBrowser())) {\n evt.preventDefault(); // Prevent swipe-down refresh\n }\n }\n\n _onScroll(): void {\n const {_scrollDelta, _options: {document}} = this;\n const {scrollTop, scrollLeft} = document.scrollingElement ?? document.body;\n\n // Adjust area start location\n this._areaLocation.x1 += _scrollDelta.x - scrollLeft;\n this._areaLocation.y1 += _scrollDelta.y - scrollTop;\n _scrollDelta.x = scrollLeft;\n _scrollDelta.y = scrollTop;\n\n // The area needs to be set back as the target-container has changed in its position\n this._setupSelectionArea();\n this._frame.next(null);\n }\n\n _onStartAreaScroll(): void {\n this._targetBoundaryScrolled = true;\n off(this._targetElement, 'scroll', this._onStartAreaScroll);\n }\n\n _wheelScroll(evt: ScrollEvent): void {\n const {manualSpeed} = this._options.behaviour.scrolling;\n\n // Consistent scrolling speed on all browsers\n const deltaY = evt.deltaY ? (evt.deltaY > 0 ? 1 : -1) : 0;\n const deltaX = evt.deltaX ? (evt.deltaX > 0 ? 1 : -1) : 0;\n this._scrollSpeed.y += deltaY * manualSpeed;\n this._scrollSpeed.x += deltaX * manualSpeed;\n this._onTapMove(evt);\n\n // Prevent default scrolling behavior, e.g. page scrolling\n evt.preventDefault();\n }\n\n _keyboardScroll(evt: KeyboardEvent): void {\n const {manualSpeed} = this._options.behaviour.scrolling;\n\n const deltaX = evt.key === 'ArrowLeft' ? -1 : evt.key === 'ArrowRight' ? 1 : 0;\n const deltaY = evt.key === 'ArrowUp' ? -1 : evt.key === 'ArrowDown' ? 1 : 0;\n\n this._scrollSpeed.x += Math.sign(deltaX) * manualSpeed;\n this._scrollSpeed.y += Math.sign(deltaY) * manualSpeed;\n\n evt.preventDefault();\n\n this._onTapMove({\n clientX: this._lastMousePosition.x,\n clientY: this._lastMousePosition.y,\n preventDefault: () => void 0,\n } as ScrollEvent);\n }\n\n _recalculateSelectionAreaRect(): void {\n const {_scrollSpeed, _areaLocation, _targetElement, _options} = this;\n const {scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth} = _targetElement as Element;\n const _targetRect = this._targetRect as DOMRect;\n\n const {x1, y1} = _areaLocation;\n let {x2, y2} = _areaLocation;\n\n const {behaviour: {scrolling: {startScrollMargins}}} = _options;\n\n if (x2 < _targetRect.left + startScrollMargins.x) {\n _scrollSpeed.x = scrollLeft ? -abs(_targetRect.left - x2 + startScrollMargins.x) : 0;\n x2 = x2 < _targetRect.left ? _targetRect.left : x2;\n } else if (x2 > _targetRect.right - startScrollMargins.x) {\n _scrollSpeed.x = scrollWidth - scrollLeft - clientWidth ? abs(_targetRect.left + _targetRect.width - x2 - startScrollMargins.x) : 0;\n x2 = x2 > _targetRect.right ? _targetRect.right : x2;\n } else {\n _scrollSpeed.x = 0;\n }\n\n if (y2 < _targetRect.top + startScrollMargins.y) {\n _scrollSpeed.y = scrollTop ? -abs(_targetRect.top - y2 + startScrollMargins.y) : 0;\n y2 = y2 < _targetRect.top ? _targetRect.top : y2;\n } else if (y2 > _targetRect.bottom - startScrollMargins.y) {\n _scrollSpeed.y = scrollHeight - scrollTop - clientHeight ? abs(_targetRect.top + _targetRect.height - y2 - startScrollMargins.y) : 0;\n y2 = y2 > _targetRect.bottom ? _targetRect.bottom : y2;\n } else {\n _scrollSpeed.y = 0;\n }\n\n const x3 = min(x1, x2);\n const y3 = min(y1, y2);\n const x4 = max(x1, x2);\n const y4 = max(y1, y2);\n\n this._areaRect = domRect(x3, y3, x4 - x3, y4 - y3);\n }\n\n _redrawSelectionArea(): void {\n const {x, y, width, height} = this._areaRect;\n const {style} = this._area;\n\n // Using transform will make the area's borders look blurry\n style.left = `${x}px`;\n style.top = `${y}px`;\n style.width = `${width}px`;\n style.height = `${height}px`;\n }\n\n _onTapStop(evt: MouseEvent | TouchEvent | null, silent: boolean): void {\n const {document, features} = this._options;\n const {_singleClick} = this;\n\n // Remove event handlers\n off(this._targetElement, 'scroll', this._onStartAreaScroll);\n off(document, ['mousemove', 'touchmove'], this._delayedTapMove);\n off(document, ['touchmove', 'mousemove'], this._onTapMove);\n off(document, ['mouseup', 'touchcancel', 'touchend'], this._onTapStop);\n off(document, 'scroll', this._onScroll);\n\n // Keep selection until the next time\n this._keepSelection();\n\n if (evt && _singleClick && features.singleTap.allow) {\n this._onSingleTap(evt);\n } else if (!_singleClick && !silent) {\n this._updateElementSelection();\n this._emitEvent('stop', evt);\n }\n\n this._scrollSpeed.x = 0;\n this._scrollSpeed.y = 0;\n\n // Unbind mouse scrolling listener\n off(this._targetElement, 'wheel', this._wheelScroll, {passive: true});\n\n // Unbind keyboard scrolling listener\n off(this._options.document, 'keydown', this._keyboardScroll, {passive: true,});\n\n // Remove selection-area from dom\n this._clippingElement.remove();\n\n // Cancel current frame\n this._frame?.cancel();\n\n // Hide selection area\n css(this._area, 'display', 'none');\n }\n\n _updateElementSelection(): void {\n const {_selectables, _options, _selection, _areaRect} = this;\n const {stored, selected, touched} = _selection;\n const {intersect, overlap} = _options.behaviour;\n\n const invert = overlap === 'invert';\n const newlyTouched: Element[] = [];\n const added: Element[] = [];\n const removed: Element[] = [];\n\n // Find newly selected elements\n for (let i = 0; i < _selectables.length; i++) {\n const node = _selectables[i];\n\n // Check if the area intersects an element\n if (intersects(_areaRect, node.getBoundingClientRect(), intersect)) {\n\n // Check if the element wasn't present in the last selection.\n if (!selected.includes(node)) {\n\n // Check if the user wants to invert the selection for already selected elements\n if (invert && stored.includes(node)) {\n removed.push(node);\n continue;\n } else {\n added.push(node);\n }\n } else if (stored.includes(node) && !touched.includes(node)) {\n touched.push(node);\n }\n\n newlyTouched.push(node);\n }\n }\n\n // Re-select elements which were previously stored\n if (invert) {\n added.push(...stored.filter(v => !selected.includes(v)));\n }\n\n // Check which elements where removed since last selection\n const keep = overlap === 'keep';\n for (let i = 0; i < selected.length; i++) {\n const node = selected[i];\n\n if (!newlyTouched.includes(node) && !(\n\n // Check if the user wants to keep previously selected elements, e.g.,\n // not make them part of the current selection as soon as they're touched.\n keep && stored.includes(node)\n )) {\n removed.push(node);\n }\n }\n\n _selection.selected = newlyTouched;\n _selection.changed = {added, removed};\n\n // Prevent range selection when selection an area.\n this._latestElement = undefined;\n }\n\n _emitEvent(name: keyof SelectionEvents, evt: MouseEvent | TouchEvent | null): unknown {\n return this.emit(name, {\n event: evt,\n store: this._selection,\n selection: this\n });\n }\n\n _keepSelection(): void {\n const {_options, _selection} = this;\n const {selected, changed, touched, stored} = _selection;\n const addedElements = selected.filter(el => !stored.includes(el));\n\n switch (_options.behaviour.overlap) {\n case 'drop': {\n _selection.stored = [\n ...addedElements,\n ...stored.filter(el => !touched.includes(el)) // Elements not touched\n ];\n break;\n }\n case 'invert': {\n _selection.stored = [\n ...addedElements,\n ...stored.filter(el => !changed.removed.includes(el)) // Elements not removed from selection\n ];\n break;\n }\n case 'keep': {\n _selection.stored = [\n ...stored,\n ...selected.filter(el => !stored.includes(el)) // Newly added\n ];\n break;\n }\n }\n }\n\n /**\n * Manually triggers the start of a selection\n * @param evt A MouseEvent / TouchEvent-like object\n * @param silent If beforestart should be fired\n */\n trigger(evt: MouseEvent | TouchEvent, silent = true): void {\n this._onTapStart(evt, silent);\n }\n\n /**\n * Can be used if during a selection elements have been added\n * Will update everything that can be selected\n */\n resolveSelectables(): void {\n this._selectables = selectAll(this._options.selectables, this._options.document);\n }\n\n /**\n * Same as deselecting, but for all elements currently selected\n * @param includeStored If the store should also get cleared\n * @param quiet If move / stop events should be fired\n */\n clearSelection(includeStored = true, quiet = false): void {\n const {selected, stored, changed} = this._selection;\n\n changed.added = [];\n changed.removed.push(\n ...selected,\n ...(includeStored ? stored : [])\n );\n\n // Fire event\n if (!quiet) {\n this._emitEvent('move', null);\n this._emitEvent('stop', null);\n }\n\n // Reset state\n this._selection = makeSelectionStore(includeStored ? [] : stored);\n }\n\n /**\n * @returns {Array} Selected elements\n */\n getSelection(): Element[] {\n return this._selection.stored;\n }\n\n /**\n * @returns {HTMLElement} The selection area element\n */\n getSelectionArea(): HTMLElement {\n return this._area;\n }\n\n /**\n * @returns {Element[]} Available selectable elements for current selection\n */\n getSelectables(): Element[] {\n return this._selectables;\n }\n\n /**\n * Set the location of the selection area\n * @param location A partial AreaLocation object\n */\n setAreaLocation(location: Partial) {\n Object.assign(this._areaLocation, location);\n this._redrawSelectionArea();\n }\n\n /**\n * @returns {AreaLocation} The current location of the selection area\n */\n getAreaLocation(): AreaLocation {\n return this._areaLocation;\n }\n\n /**\n * Cancel the current selection process, pass true to fire a stop event after cancel\n * @param keepEvent If a stop event should be fired\n */\n cancel(keepEvent = false): void {\n this._onTapStop(null, !keepEvent);\n }\n\n /**\n * Unbinds all events and removes the area-element.\n */\n destroy(): void {\n this.cancel();\n this.disable();\n this._clippingElement.remove();\n super.unbindAllListeners();\n }\n\n /**\n * Enable selecting elements\n */\n enable = this._toggleStartEvents;\n\n /**\n * Disable selecting elements\n */\n disable = this._toggleStartEvents.bind(this, false);\n\n /**\n * Adds elements to the selection\n * @param query CSS Query, can be an array of queries\n * @param quiet If this should not trigger the move event\n */\n select(query: SelectAllSelectors, quiet = false): Element[] {\n const {changed, selected, stored} = this._selection;\n const elements = selectAll(query, this._options.document).filter(el =>\n !selected.includes(el) &&\n !stored.includes(el)\n );\n\n // Update element lists\n stored.push(...elements);\n selected.push(...elements);\n changed.added.push(...elements);\n changed.removed = [];\n\n // We don't know which element was \"selected\" first, so clear it\n this._latestElement = undefined;\n\n // Fire event\n if (!quiet) {\n this._emitEvent('move', null);\n this._emitEvent('stop', null);\n }\n\n return elements;\n }\n\n /**\n * Removes a particular element from the selection\n * @param query CSS Query, can be an array of queries\n * @param quiet If this should not trigger the move event\n */\n deselect(query: SelectAllSelectors, quiet = false) {\n const {selected, stored, changed} = this._selection;\n\n const elements = selectAll(query, this._options.document).filter(el =>\n selected.includes(el) ||\n stored.includes(el)\n );\n\n this._selection.stored = stored.filter(el => !elements.includes(el));\n this._selection.selected = selected.filter(el => !elements.includes(el));\n this._selection.changed.added = [];\n this._selection.changed.removed.push(\n ...elements.filter(el => !changed.removed.includes(el))\n );\n\n // We don't know which element was \"selected\" first, so clear it\n this._latestElement = undefined;\n\n // Fire event\n if (!quiet) {\n this._emitEvent('move', null);\n this._emitEvent('stop', null);\n }\n }\n}\n"], - "mappings": ";;;AAKkD,IAA3C,IAA2C,MAA3C;EACc,cAAA;AA8BE,SAAA,aAAA,oBAAA,IAAA,GAAA,KAAA,KAAA,KAAA,kBAAA,KAAA,MAAA,KAAA,qBAAA,KAAA,OAAA,KAAA;EA5BZ;EACH,iBAAiB,GAAA,GAAA;AACZ,UAAA,IAAA,KAAA,WAAW,IAAWA,CAAG,KAEvB,oBAAA,IAAA;AAAA,WAAA,KAAA,WAAA,IAAA,GAAA,CAAA,GAAA,EAAA,IAAA,CAAA,GAAA;EAGJ;EAVJ,oBAAAC,GAAAA,GAAAA;AAWC,QAAA;AACO,YAAA,IAAA,KAAA,WAAA,IAAA,CAAA,MAAA,QAAA,EAAA,OAAA,CAAA,GAAA;EAGJ;EACH,cAAS,MAAA,GAAA;AACT,QAAA,IAAA;AACI,eAAYC,KAAI,KAAM,WAAUC,IAAAA,CAAAA,KAAAA,CAAAA;AAG7B,UAAA,EAAAA,GAAAA,CAAAA,MAAAA,SAAAA;AAAA,WAAA;EAGJ;EACH,qBAAgB;AAAM,SAAA,WAAA,MAAA;EAO9B;ACrCA;AAcQ,IAAA,IAAA,CAAA,GAAOC,IAAS,SAAA,OAAA,KAAA,WAAA,IAAA,IAAA;AAAhB,IAAgB,IAAA,CAAA,EAAA,OAAA,EAAA,GAAA,GAAA,MAAA;AAChB,MAAA,OAAA,KAAYC;AACR,eAAc,CAAA,GAAA,CAAA,KAEJA,OAAsBC,QAAK,CAAA;AAG7C,YAAWC,WAAQ,EAETC,CAAAJ,IAAW,EAAIK,CAAQF;;ACtBd,UAAK,WAAUG,EAAQ,CAAA,IAAGC,EAAS,CAAA;AACtD;ADYI,ICZJ,IAAA,CAAMC,IAAO,GAAC,IAAAC,GAAG,IAAG,GAAA,IAAAH,MAAO;AAEpB,QAAA,IAAC,EAAGE,GAAM,GAAA,GAAA,GADF,OAAM,GAAK,QAAA,GAAc,KACjB,GAAA,MAAA,GAAA,OAAA,IAAA,GAAA,QAAA,IAAA,EAAA;AAC3B,SCI8CE,EAAAA,GAAqB,GAAA,QAAA,MAAA,KAAA,UAAA,CAAA,EAAA;AAC3D;AFIA,IEJA,IAAAC,CAAAA,MACU;AAGP,MAAA,GAAA,IAAA,IAAA,IAAA;AAAA,SACH;IACmB,MAAAC,IAEVC,MACMA;AAEH,UAAG,GAAGF,MACCE,IAAA,MAAA,IAAA,sBAAA,MAAA;AACV,UAAA,GAAA,CAAA,GAAA,IAAA;MAET,CAAA;IACA;IACI,QAAA,MAAA;AACO,2BAAA,CAAA,GAAA,IAAA;IAEf;EACJ;ACrBI;AHII,IGJJ,IAAA,CAAA,GAAQC,GAAM,IAAA,YAAA;AAAA,UACL,GAAA;IACD,KAAA,UAAc;AAGP,YAAA,IAAAC,EAAOC,OAAE,EAAA,QACH,GAAA,IAAA,EACTC,MAAOD,EAAE,SACTC;AAAS,aAAA,KAAA,EAAA,QAAA,KAAA,EAAA,SAAA,KAAA,EAAA,OAAA,KAAA,EAAA;IAEjB;IACI,KAAA;AAKJ,aAAK,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA;IACD,KAAA;AAIJ,aAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA;EAER;AGnBQ;ANAA,IMAAC,IAAAA,MAAAA,WAAiB,kCAAmC,EAAA;ANApD,IMCQ,IAAM,MAAU,YAI5BA;ANLI,IMKkB,IAAA,CAAA,MAAA,MAAA,QAAA,CAAA,IAAA,IAAA,CAAA,CAAA;ANLlB,IMKkB,IAAA,CAAA,MAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,MAAA;AAEtB,GAAA,aAAWC,kBAAMD,aAAAA,cAAAA,IAAAA,MAAAA,KAAAA,CAAAA,IAAAA,IAAAA,EAAAA,CAAAA,GAAAA,IAAAA,EAAAA,CAAAA;AACb,aAAIC,KAAAA;AACA,QAAA;AACO,iBAAYT,KAAsB;AAcnCU,UAAc,CAAA,EAAA,GAAA,GAAA,EAAA,SAUnBC,OAAMD,GAAc,EAAA,CAAA;AP3C1B;ACSC,IDTD,IAAAvB,EAAAA,kBAAAA;ACSC,IDTDA,IAAAA,EAAAA,qBAAAA;ACSC,IDTDA,IAAAA,CAAAA,MAAAA;AOsDG,MAAA;AACN,QAAA,EAAO,SAAa,GAAGyB,SAASC,GAAM,QAAA,EAAA,MAAA,IAAA,EAAA,YAAA,OAAA,SAAA,EAAA,CAAA,MAAA;AAC1C,SCnD0BC,EAA8BC,GAAAA,GAAgB,GAAA,GAAA,QACnD,EACZ;AAAA;APED,IODIC,IAAAA,CAAAA,GAAA,IAAA,aAAgB,EAAA,CAAA,EACV;EAKT,CAAA,MACA,OAAO,KAAA,WCOeC,MAAmBC,KACrC,EAAA,iBAGMC,CAAAA,CAAAA,IAAY,aACN,UAAWA,IAIxB;AAMI,EAAA,KAAA,EAAA,OAAkB,OAAA;AR5B1B,IQ4B0B,IAAA,CAAA,GAAA,MAAA,EAAA,KAAA,CAAA,MAAA,OAAA,KAAA,WAAA,EAAA,WAAA,IAAA,OAAA,KAAA,WAAA,EAAA,WAAA,EAAA,SAAA,QAAA,EAAA,UAAA,MAAA,CAAA,MAAA;AAAA,UACT,GAAA;IACD,KAAA;AACJ,aAAK,EAAA;IACM,KAAA;AACX,aAAK,EAAA,WAAA,EAAA;IACD,KAAA;AAAa,aAAA,EAAA;EAExB;AChC2D,CAAA,IACpE,KAAA;ATLI,ISKJC,EAAAA,KAAAA,GAAAA,KAAAA,GAAAA,KAAAA,GAAAA,MAAAA,EAAAA,IAAAA;ATLI,ISKJA,IAAAA,CAAAA,IAAAA,CAAAA,OAAAA;EACA,QAAA;EACA,UAAU,CAAA;EACV,SAAS,CAAA;EACb,SAEA,EAAA,OAAqBC,CAAAA,GAAsBC,SAA6B,CAAA,EAAA;AAAA;ATXhE,ISiDJ,IAAA,MAAYC,WAA8B,EAAA;EV1DvC,YAAAC,GAAAC;AU2DO,QAAA,GAAA,GAhCV,GAAA,GAAQ;AAkCY,UACZ,GAAA,KAAA,aAAoB,EAAA,GAAA,KAAA,0BAAA,MAAA,KAAA,eAAA,CAAA,GAAA,KAAA,gBAAA,EAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,EAAA,GAAA,KAAA,YAAA,EAAA,GAAA,KAAA,eAAA,MAAA,KAAA,mBAAA,MAAA,KAAA,mBAAA,OAAA,KAAA,eAAA,EAAA,GAAA,GAAA,GAAA,EAAA,GAAA,KAAA,eAAA,EAAA,GAAA,GAAA,GAAA,EAAA,GAAA,KAAA,qBAAA,EAAA,GAAA,GAAA,GAAA,EAAA,GAAA,KAAA,SAAA,KAAA,oBAAA,KAAA,UAAA,KAAA,mBAAA,KAAA,MAAA,KAAA,GAAA,KAAA,WAAA;MACpB,oBAAA;MACA,yBAAc;MACd,aAAU,CAAA;MACV,UAAA,OAAa;MACb,YAAY,CAAC,MAAM;MACnB,YAAW,CAAA,MAAA;MACX,WAAGF;MAEH,GAAA;MAAW,WACE;QACT,SAAA;QACA,WAAW;QACX,UAAO,CAAA,CAAA;QACP,GAAA,EAAA;QAIA,iBAAW,IAAA,EAAA,cAAA,QAAA,EAAA,iBAAA,OAAA,EAAA,UAAA,kBAAA,WAAA,EAAA,UAAA,iBAAA,EAAA,GAAA,IAAA,GAAA,IAAA,GAAA,EAAA,UAAA,eAAA,IAAA,EAAA,GAAA,IAAA,GAAA,GAAA;QAAA,WACP;UACA,cAAa;UACb,aAAO;UACP,IAAA,IAAA,EAAA,cAAoB,OAAA,SAAA,EAAA;UAAA,oBACb;YACH,GAAG;YACH,GAAA;YAA6B,IAAA,KAAA,IAAA,EAAA,cAAA,OAAA,SAAA,EAAA,cAAA,OAAA,SAAA,EAAA;UACjC;QAER;MAEA;MAAU,UACC;QACP,OAAO;QACP,OAAA;QACA,gBAAO;QACP,GAAA,EAAA;QAAW,WACA;UACP,OAAA;UACA,WAAO;UAAU,IAAA,IAAA,EAAA,aAAA,OAAA,SAAA,EAAA;QACrB;MAER;IAIA;AACI,eAAY,KAAgB,OAAM,oBACb,OAAkBhC,eAAc,IAAA,CAAA;AAIzD,aAAO,KAAA,CAAA,KAAAmC,eAAU,KAAA,CAAAC,IAAoB,KAAA,CAAA,EAAA,KAAA,IAAA;AAChC,UAAA,EAAA,UAAiB,GAAA,oBACjB,GAAA,yBAA4B,EAAA,IAAA,KAAc;AAS/B,SACZ,QAAA,EAAY,cAAA,KAAA,GAAA,KAAA,mBAAA,EAAA,cAAA,KAAA,GAAA,KAAA,iBAAA,YAAA,KAAA,KAAA,GAAA,KAAA,MAAA,UAAA,IAAA,CAAA,GAAA,KAAA,KAAA,iBAAA,UAAA,IAAA,CAAA,GAAA,EAAA,KAAA,OAAA;MACZ,YAAK;MACL,KAAA;MACA,MAAA;MACH,UAEQ;IAAkB,CAAA,GACvB,EAAA,KAAA,kBAAU;MACV,UAAU;MACV,UAAA;MAAW,WAAA;;MAEX,eAAQ;MACX,QAEI;IACD,CAAA,GAAA,KAAK,SAAA,EAAA,CAAA,MAAA;AAIR,WAED,8BAAY,GAAA,KAAA,wBAAA,GAAA,KAAA,WAAA,QAAA,CAAA,GAAA,KAAA,qBAAA;IAAA,CAAA,GAAA,KAAA,OAAA;EAGhB;EACI,mBAAO,IAAU,MAAA;AAGd3B,UAAU,EAAA,UAAa,GAAA,UAAK,EAAA,IAE3B4B,KAAS,UACNF,IAAU,IAAA,IAAA;AACjB,MAAA,GAAA,aAAA,KAAA,WAAA,GAAA,EAAA,SAAA,EAAA,GAAA,cAAA,KAAA,aAAA,EAAA,SAAA,MAAA,CAAA;EAGJ;EACI,YAAO,GAAA3B,IAAG8B,OAAG;AAIb,UAAIC,EAAAA,GAAAA,GAAAA,GAAe,GAAA,QAAA,EAAA,IAA8BA,EAAAA,CAAKC,GAAU,EAAA,UAAQ,GAAA,YAAA,GAAA,YAAA,GAAA,UAAA,GAAA,WAAA,EAAA,IAAA,KAAA,UAAA,IAAA,EAAA,sBAAA;AACpE,QAAA,aAAA,cAAA,CAAA,EAAA,GAAA,EAAA,QAAA;AAIE;AAIN,UAAK,IAAA,EAAA,GAAA,CAAA,GAAA,IAAiBC,EAAmB,GAAA,CAAA;AAAA,SACrCvB,iBAAc,EAAA;MAClB,CAAA,MAAA,EAAA,EAAA,sBAAA,GAAA,CAAA;IAGM;AAQN,UANK,IAAA,EAAA,aAAA,GAAkBuB,IAAmB,EAAK,KAAA,CAAA,MAAc,EAAA,SAEzD,CAAC,CAAA;AAKD,QAAA,KAAA,kBAAA,EAAA,KAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,GAAA,CAAA,KAAA,kBAAA,CAAA,KAAA,CAAA,KAAA,mBAAA,CAAA,KAAA,KAAA,WAAA,eAAA,CAAA,MAAA;AAGC;AAGC,SAAA,gBAAyB,EAAA,IAAA,GAAA,IAA6B,GAAA,IAAA,GAAA,IAAA,EAAA;AAC5D,UAAK,IAAA,EAAA,oBAAiC,EAAA;AAatC,SAAA,eAAA,EAAA,GAAA,EAAA,YAAA,GAAA,EAAA,UAAA,GAAA,KAAA,eAAA,MAAA,KAAA,eAAA,OAAA,IAAA,GAAA,EAAA,GAAA,CAAA,aAAA,WAAA,GAAA,KAAA,iBAAA,EAAA,SAAA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,WAAA,eAAA,UAAA,GAAA,KAAA,UAAA,GAAA,EAAA,GAAA,UAAA,KAAA,SAAA,GAAA,EAAA,mBAAA,KAAA,0BAAA,OAAA,EAAA,KAAA,iBAAA,UAAA,KAAA,kBAAA;EAGJ;EACU,aAAC,GAAA;AAEH,UAAAnB,EAAAA,WAAAA,EAAAA,WAAAA,EAAAA,GAAAA,OAAAA,EAAAA,IAAAA,KAAAA,SAAAA,UAAAA,IAAAA,EAAAA,CAAAA;AAEJ,QAAIoB;AACA,QAAApB,MAAW;AAAA,UAAA,EAAA;aAEN,MAAA,SAAA;AAEC,WAAA,mBAASqB;AACNrB,YAAA,EAAA,GAAK,GAAA,GAAA,EAAA,IAAa;AACvB,UAAA,KAAM,aAAQ,KAAAsB,CAAAA,MAAMC;AACpB,cAAA,EAAOrC,OAAIsC,GAAStC,MAAIoC,GAAQN,KAAIS,GAAUT,QAAIO,EAAAA,IAAAA,EAAAA,sBAAAA;AACrD,eAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA;MAAA,CAAA;IAGL;AACI,QAAA,CAAA;AAYJ;AACI,SAAA,KAAW,mBAAA,GAAA,CAAA,KAAA,aAAA,SAAA,CAAA;AACP,UAAAvB,EAASA;AAAO,YACb,EAAA;WACE;AAIL,aAAA,2BAAA,KAAA,eAAA;AAAA;MAMF;AAGN,UAFK,EAAA,QAAA,EAAA,IAAW,KAAA;AAGZ,QAAA,KAAM0B,WAAiB,SAAA,CAAA,GAGjB,EAACC,YAAkC,KAAA,KAAA,gBAAkC;AAGlC,YAAO/B,IAC3CA,KAAG,gBAAA,CAAA,GAAwB+B,CAAS,IAAI,EAAA,wBACrC,CAAA,IAAwBC,IAAS,CAAI,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,IAAA,CAAA,GAAA,KAAA,aAAA;QAAA,CAC1CD,MAAoB,EAAA,wBAAA,CAAA,IAAA,KAAA,EAAA,wBAAA,CAAA,IAAA;MAEvB,GAAA,GAAK,CAAA;AACiB,WAEtBpB,OAAO,CAAA,GAASP,KAAM,iBACA;IAQ1B;AAAA,QAAA,SAAA,CAAA,MAAA,EAAA,WAAA,KAAA,EAAA,WAAA,EAAA,MAAA,CAAA,MAAA,KAAA,WAAA,OAAA,SAAA,CAAA,CAAA,KAAA,KAAA,SAAA,CAAA,KAAA,KAAA,OAAA,CAAA,GAAA,KAAA,iBAAA;EAGJ;EACU,gBAAC,GAAA;AAKP,UAAA,EAAA,WAAA,GAAA,UAAA,GAAA,WAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,KAAA,UAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,KAAA,eAAA,EAAA,GAAA,GAAA,GAAA,EAAA,IAAA,EAAA,CAAA;AAAA;;MAMK,OAAO6B,KAAmB,YAAYC,EAAI5C,IAAI6C,KAAE,IAAqC,EAAA,KAASf;MACjG,OAAA,KAAA,YAAA,EAAA,IAAA,CAAA,KAAA,EAAA,KAAA,EAAA,IAAA,CAAA,KAAA,EAAA;MAGE;AACI,UAAIH,EAAAA,GAAW,CAAA,aAAW,WAAe,GAAA,KAAA,iBAAkB,EAAA,SAAU,MAAA,CAAA,GAAA,KAAA,WAAA,cAAA,CAAA,MAAA,OAAA;AACrE,UAAA,GAAA,CAAA,WAAA,eAAA,UAAA,GAAA,KAAA,UAAA;AAAA;MAGDmB;AA0CgB,QAAA,GAAA,CAAA,aAAA,WAAA,GAAA,KAAA,YAAA,EAAA,SAAA,MAAA,CAAA,GAAA,EAAA,KAAA,OAAA,WAAA,OAAA,GAAA,EAAA,GAAA,CAAA,EAAA,CAAA,EAAA,YAAA,KAAA,gBAAA,GAAA,KAAA,mBAAA,GAAA,KAAA,eAAA,OAAA,KAAA,cAAA,KAAA,eAAA,sBAAA,GAAA,KAAA,mBAAA,KAAA,eAAA,iBAAA,KAAA,eAAA,gBAAA,KAAA,eAAA,gBAAA,KAAA,eAAA,aAAA,KAAA,qBAAA,EAAA,KAAA,gBAAA,SAAA,KAAA,cAAA,EAAA,SAAA,MAAA,CAAA,GAAA,EAAA,KAAA,SAAA,UAAA,WAAA,KAAA,iBAAA,EAAA,SAAA,MAAA,CAAA,GAAA,KAAA,eAAA,KAAA,aAAA,OAAA,CAAA,MAAA,KAAA,eAAA,SAAA,CAAA,CAAA,IAAA,KAAA,oBAAA,GAAA,KAAA,WAAA,SAAA,CAAA,GAAA,KAAA,WAAA,CAAA;IAGvB;AAAyB,SAAA,iBAAA,CAAA;EAG7B;EACI,sBAAO;AAGH,UAAK,EAAA,kBAOLC,GAAIC,gBAAkB,GAAA,OAAA,EAAA,IAAA,MAAA,IAAA,KAAA,cAAA,EAAA,sBAAA;AAAA,SAClB,oBAAQ,EAAA,GAAA;MACR,KAAA,EAAMC;MACN,MAAA,EAAOA;MACP,OAAA,EAAQA;MACX,QAOU,EAAA;IAAA,CAAA,GACP,EAAA,GAAA;MACA,WAAA,CAAY,EAACA;MAChB,YAIqB,CAAA,EAAA;IAAA,CAAA,MACb,EAAA,GAAA;MACL,KAAA;MACA,MAAA;MACA,OAAA;MACH,QAEU;IAAA,CAAA,GACP,EAAA,GAAA;MACA,WAAA;MACH,YAAA;IACL,CAAA;EAGJ;EACI,WAAO,GAAA;AAWH,UANU,EAAA,cACKnB,GAEnB,eAAK,GAAA,UAAuB9B,GAC5B,QAAK,EAAA,IAAA,MAAA,EAAA,cAEI,EAAA,IAAA,EAAA,UAAA,WAA0B,IAAA,KAAA,gBAAuCkD,EAAa,GAAI,GAAA,GAAA,EAAA,IAAA,EAAA,CAAA;AAGvF,QAAA,EAAA,KAAK,GAAA,EAAA,KAAA,GAAA,KAAmB,mBAAA,IAAA,GAAA,KAAA,mBAAA,IAAA,GAAA,KAAA,oBAAA,CAAA,KAAA,qBAAA,EAAA,KAAA,EAAA,IAAA;AAExB,WAAA,mBAAqB;AACjB,YAAI,IAAc,MAAMA;AACpB,YAAA,CAAA,EAAK,KAAA,CAAA,EAAA,GAAA;AACL,eAAA,mBAAA;AAAA;QAIE;AAEFA,cAAa,EACbC,WAAe,GAAA,YAA+C,EAChDC,IAAA;AAiBtB,UAAA,MAAA,EAAA,aAAA,EAAA,EAAA,IAAA,CAAA,GAAA,EAAA,MAAA,EAAA,YAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,IAAA,CAAA,GAAA,EAAA,MAAA,EAAA,aAAA,IAAA,EAAA,KAAA,CAAA,GAAA,sBAAA,CAAA;MAEA;AAA4B,4BAAA,CAAA;IAQ5B;AAGJ,QAAA,KAAK,CAAA;AAAoB,SAAA,iBAAA,CAAA;EAG7B;EACU,iBAAC,GAAAvB;AAMP,UAAc,EAAA,UAAS,EAAqB,IAAK,KAAA;AAEjD,KAAA,EAAA,SAAA,EAAA,KAAA,KAAA,oBAAA,EAAA,MAAA,EAAA,eAAA;EAGJ;EACI,YAAO;AAIF,UAAA,EAAA,cAAc,GAAMwB,UACpB,EAAA,UAAA,EAAA,EAAA,IAAc,MAAmB,EAAA,WACrBC,GACjBD,YAGA,EAAK,IAAA,EAAA,oBACA,EAAA;AAAgB,SAAA,cAAA,MAAA,EAAA,IAAA,GAAA,KAAA,cAAA,MAAA,EAAA,IAAA,GAAA,EAAA,IAAA,GAAA,EAAA,IAAA,GAAA,KAAA,oBAAA,GAAA,KAAA,OAAA,KAAA,IAAA;EAGzB;EACI,qBAAK;AACqD,SAAA,0BAAA,MAAA,EAAA,KAAA,gBAAA,UAAA,KAAA,kBAAA;EAG9D;EACI,aAAO,GAAA;AAKF,UAAA,EAAA,aAAa,EAAKE,IAASC,KAC3B,SAAA,UAAa,WAClB,IAAK,EAAA,SAAc,EAAA,SAGf,IAAA,IAAA,KAAe,GAAA,IAAA,EAAA,SAAA,EAAA,SAAA,IAAA,IAAA,KAAA;AAAA,SAAA,aAAA,KAAA,IAAA,GAAA,KAAA,aAAA,KAAA,IAAA,GAAA,KAAA,WAAA,CAAA,GAAA,EAAA,eAAA;EAGvB;EACI,gBAAO,GAAA;AAKP,UAAK,EAAA,aAAa,EAAK,IAAA,KAAK,SAC5B,UAAK,WAAa,IAAK,EAAA,QAAgB,cAEnC,KAAA,EAAA,QAEJ,eAAgB,IAAA,GAAA,IAAA,EAAA,QAAA,YAAA,KAAA,EAAA,QAAA,cAAA,IAAA;AAAA,SACZ,aAAc,KAAA,KAAA,KAAA,CAAA,IAAmB,GAAA,KAAA,aAAA,KAAA,KAAA,KAAA,CAAA,IAAA,GAAA,EAAA,eAAA,GAAA,KAAA,WAAA;MACjC,SAAS,KAAK,mBAAmB;MACjC,SAAA,KAAA,mBAAgB;MAAA,gBAAA,MAAA;MACJ;IAAA,CAAA;EAGpB;EACI,gCAAqB;AAKjB,UAAC,EAAA,cAAI,GAAMJ,eAAAA,GAAAA,gBAAAA,GAAAA,UAAAA,EAAAA,IAAAA,MAAAA,EAAAA,WAAAA,GAAAA,cAAAA,GAAAA,cAAAA,GAAAA,YAAAA,GAAAA,aAAAA,GAAAA,aAAAA,EAAAA,IAAAA,GAAAA,IAAAA,KAAAA,aAAAA,EAAAA,IAAAA,GAAAA,IAAAA,EAAAA,IAAAA;AAET,QAAA,EAAA,IAAC,GAAA,IAAA,EAAW,IAAC;AAEfK,UAAiB,EAAA,WAA0B,EAC9BP,WAAkBN,EAAIc,oBAAgD,EACnFD,EAAAA,EAAKA,IAAKC;AAkBR,QAAA,EAAAC,OAASd,EAAIY,KACbG,EAAAA,IAASC,IAAM,CAAA,EACfC,EAAAA,OAAe,IACfC,EAAAA,CAAKC,IAAIH,GAAM,IAAA,IAAA,EAAA,OAAA,EAAA,OAAA,KAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,IAAA,IAAA,IAAA,EAAA,EAAA,OAAA,EAAA,QAAA,IAAA,EAAA,CAAA,IAAA,GAAA,IAAA,IAAA,EAAA,QAAA,EAAA,QAAA,KAAA,EAAA,IAAA,GAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,MAAA,IAAA,EAAA,CAAA,IAAA,GAAA,IAAA,IAAA,EAAA,MAAA,EAAA,MAAA,KAAA,IAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,IAAA,IAAA,IAAA,EAAA,EAAA,MAAA,EAAA,SAAA,IAAA,EAAA,CAAA,IAAA,GAAA,IAAA,IAAA,EAAA,SAAA,EAAA,SAAA,KAAA,EAAA,IAAA;AAErB,UAAK,IAAA,EAAA,GAAA,CAAA,GAAoBF,IAAIC,EAAIE,GAAAA,CAAKH,GAAII,IAAKH,EAAE,GAAA,CAAA,GAAA,IAAA,EAAA,GAAA,CAAA;AAAA,SAAA,YAAA,EAAA,GAAA,GAAA,IAAA,GAAA,IAAA,CAAA;EAGrD;EACI,uBAAa;AAIPjE,UAAA,EAAA,GAAO,GAAI,GAAA,GACXA,OAAM,GAAGmC,QACTnC,EAAA,IAAA,KAAQ,WACR,EAAA,OAAS,EAAGG,IAAM,KAAA;AAAA,MAAA,OAAA,GAAA,CAAA,MAAA,EAAA,MAAA,GAAA,CAAA,MAAA,EAAA,QAAA,GAAA,CAAA,MAAA,EAAA,SAAA,GAAA,CAAA;EAG5B;EV5jBG,WAAAV,GAAAA,GAAAA;AU6jBC,QAAA;AAIAwB,UAAI,EAAK,UAAA,GAAA,UAAgB,EAAU,IAAA,KAAK,UAAA,EAAA,cACzB,EAAA,IAAA;AA+BkB,MAAA,KAAA,gBAAA,UAAA,KAAA,kBAAA,GAAA,EAAA,GAAA,CAAA,aAAA,WAAA,GAAA,KAAA,eAAA,GAAA,EAAA,GAAA,CAAA,aAAA,WAAA,GAAA,KAAA,UAAA,GAAA,EAAA,GAAA,CAAA,WAAA,eAAA,UAAA,GAAA,KAAA,UAAA,GAAA,EAAA,GAAA,UAAA,KAAA,SAAA,GAAA,KAAA,eAAA,GAAA,KAAA,KAAA,EAAA,UAAA,QAAA,KAAA,aAAA,CAAA,IAAA,CAAA,KAAA,CAAA,MAAA,KAAA,wBAAA,GAAA,KAAA,WAAA,QAAA,CAAA,IAAA,KAAA,aAAA,IAAA,GAAA,KAAA,aAAA,IAAA,GAAA,EAAA,KAAA,gBAAA,SAAA,KAAA,cAAA,EAAA,SAAA,KAAA,CAAA,GAAA,EAAA,KAAA,SAAA,UAAA,WAAA,KAAA,iBAAA,EAAA,SAAA,KAAA,CAAA,GAAA,KAAA,iBAAA,OAAA,IAAA,IAAA,KAAA,WAAA,QAAA,EAAA,OAAA,GAAA,EAAA,KAAA,OAAA,WAAA,MAAA;EAGrC;EACI,0BAAOqD;AAUP,UAAA,EAAA,cAAiC,GAAA,UAAa,GAAA,YAAA,GAAA,WAAA,EAAA,IAAA,MAAA,EAAA,QAAA,GAAA,UAAA,GAAA,SAAA,EAAA,IAAA,GAAA,EAAA,WAAA,GAAA,SAAA,EAAA,IAAA,EAAA,WAAA,IAAA,MAAA,UAAA,IAAA,CAAA,GAAA,IAAA,CAAA,GAAA,IAAA,CAAA;AACpC,aAAAC,IAAOD,GAAc,IAAA,EAAA,QAAA,KAAA;AAG3B,YAAeE,IAAWD,EAAK,CAAA;AAG3B,UAAA,EAAKE,GAAS,EAAA,sBAAa,GAAA,CAAA,GAAA;AAS3B,YAAkB,EAAA,SAAa,CAAA;AACV,YAAA,SAPbC,CAAUhD,KAAO,CAAA,EAAA,SAAgB,CAAA,KAAA,EAAA,KAAA,CAAA;iBACpB6C,KAAI,EAAA,SAAA,CAAA,GAAA;AACjB,YAAA,KAAA,CAAA;AAAA;QAEA;AAMK,YAAA,KAAS,CAAA;AAAA,UAAA,KAAA,CAAA;MAC1B;IAIAG;AAKJ,SAAA,EAAMC,KAAOC,GAAAA,EAAY,OAAA,CAAA,MAAA,CAAA,EAAA,SAAA,CAAA,CAAA,CAAA;AACzB,UAAA,IAASC,MAAOA;AACN,aAAAN,IAAOE,GAAU,IAAA,EAAA,QAAA,KAAA;AAEnB,YAAc,IAAA,EAASF,CAAI;AAAK,OAAA,EAAA,SAAA,CAAA,KAAA;;OAOpC,KAAA,EAAA,SAAA,CAAA,MAAA,EAAA,KAAA,CAAA;IAGJO;AAIsB,MAAA,WAAA,GAAA,EAAA,UAAA,EAAA,OAAA,GAAA,SAAA,EAAA,GAAA,KAAA,iBAAA;EAG1B;EACW,WAAA,GAAK,GAAA;AAAW,WACnB,KAAO1C,KAAAA,GAAAA;MACP,OAAO;MACP,OAAA,KAAW;MACd,WAAA;IAAA,CAAA;EAGL;EACU,iBAAC;AAIC,UAAA,EAAA2C,UAAS,GAAU,YAAS,EAAA,IAAA,MAAA,EAAA,UAAA,GAAA,SAAA,GAAA,SAAA,GAAA,QAAA,EAAA,IAAA,GAAA,IAAA,EAAA,OAAA,CAAA,MAAA,CAAA,EAAA,SAAA,CAAA,CAAA;AAAA,YAC3B,EAAA,UAAQ,SAAA;MACT,KAAW,QAAS;AAAA,UAChB,SAAGC;UACH,GAAGtD;UAAyC,GAAA,EAAA,OAAA,CAAA,MAAA,CAAA,EAAA,SAAA,CAAA,CAAA;;QAEhD;AAAA;MAEJ;MACI,KAAW,UAAS;AAAA,UAChB,SAAGsD;UACH,GAAGtD;UAAiD,GAAA,EAAA,OAAA,CAAA,MAAA,CAAA,EAAA,QAAA,SAAA,CAAA,CAAA;;QAExD;AAAA;MAEJ;MACI,KAAW,QAAS;AAAA,UAChB,SAAGA;UACH,GAAG+C;UAA0C,GAAA,EAAA,OAAA,CAAA,MAAA,CAAA,EAAA,SAAA,CAAA,CAAA;;QAEjD;AAAA;MACJ;IACJ;EAAA;;;;;;EASK,QAAA,GAAA,IAAA,MAAYrC;AAAW,SAAA,YAAA,GAAA,CAAA;EAAA;;;;;EAQ5B,qBAAK;AAA0E,SAAA,eAAA,EAAA,KAAA,SAAA,aAAA,KAAA,SAAA,QAAA;EAAA;;;;;;EAS/E,eAAO,IAAA,MAAU,IAAA,OAAAV;AAEjBuD,UAAQ,EAAA,UACA,GAAA,QAAQ,GAAA,SAAA,EAAA,IAAA,KAAA;AAAA,MACZ,QAAGR,CAAAA,GAAAA,EAAAA,QAAAA;MACH,GAAIS;MACR,GAGKC,IACI,IAAA,CAAA;IAKuD,GAAA,MAAA,KAAA,WAAA,QAAA,IAAA,GAAA,KAAA,WAAA,QAAA,IAAA,IAAA,KAAA,aAAA,EAAA,IAAA,CAAA,IAAA,CAAA;EAAA;;;;EAOhE,eAAY;AAAW,WAAA,KAAA,WAAA;EAAA;;;;EAOvB,mBAAY;AAAA,WAAA,KAAA;EAAA;;;;EAOZ,iBAAY;AAAA,WAAA,KAAA;EAAA;;;;;EAQL,gBAAO,GAAA;AACY,WAAA,OAAA,KAAA,eAAA,CAAA,GAAA,KAAA,qBAAA;EAAA;;;;EAO1B,kBAAY;AAAA,WAAA,KAAA;EAAA;;;;;EAQP,OAAA,IAAA,OAAA;AAA2B,SAAA,WAAA,MAAA,CAAA,CAAA;EAAA;;;;EAOhC,UAAK;AAGoB,SAAA,OAAA,GAAA,KAAA,QAAA,GAAA,KAAA,iBAAA,OAAA,GAAA,MAAA,mBAAA;EAAA;;;;;;EAmBzB,OAAA,GAAO,IAAA,OAAA;AACmD,UAAOpE,EAAAA,SACnD,GAAA,UACF,GAAA,QAAW,EAAA,IAAA,KAAA,YAAA,IAAA,EAAA,GAAA,KAAA,SAAA,QAAA,EAAA;MACvB,CAAA,MAAA,CAAA,EAAA,SAAA,CAAA,KAAA,CAAA,EAAA,SAAA,CAAA;IAGO;AAcA,WAAA,EAAA,KAAA,GAAA,CAAA,GAAA,EAAA,KAAA,GAAA,CAAA,GAAA,EAAA,MAAA,KAAA,GAAA,CAAA,GAAA,EAAA,UAAA,CAAA,GAAA,KAAA,iBAAA,QAAA,MAAA,KAAA,WAAA,QAAA,IAAA,GAAA,KAAA,WAAA,QAAA,IAAA,IAAA;EAAA;;;;;;EASP,SAAM,GAAC,IAAA,OAAA0D;AAEmD,UAAO,EAAA,UACpD,GAAW,QACb,GAAA,SAAW,EAAA,IAAA,KAAA,YAAA,IAAA,EAAA,GAAA,KAAA,SAAA,QAAA,EAAA;MACtB,CAAA,MAAA,EAAA,SAAA,CAAA,KAAA,EAAA,SAAA,CAAA;IAEK;AAG2B,SACzBW,WAAgBrE,SAAe,EAAA,OAAQ,CAAA,MAASA,CAAE,EAAC,SAAA,CAAA,CAAA,GAAA,KAAA,WAAA,WAAA,EAAA,OAAA,CAAA,MAAA,CAAA,EAAA,SAAA,CAAA,CAAA,GAAA,KAAA,WAAA,QAAA,QAAA,CAAA,GAAA,KAAA,WAAA,QAAA,QAAA;MAC1D,GAGA,EAAA,OAAK,CAAA,MAAA,CAAA,EAAA,QAAiB,SAIb,CAAA,CAAA;IAET,GAAA,KAAA,iBAAA,QAAA,MAAA,KAAA,WAAA,QAAA,IAAA,GAAA,KAAA,WAAA,QAAA,IAAA;EAER;AAx1BIY;AADJ,EAAA,UAAAA;;", - "names": ["set", "_a", "data", "ok", "attr", "key", "value", "val", "style", "unitify", "width", "height", "rect", "x", "fn", "previousArgs", "args", "lock", "mode", "bxc", "a", "byc", "items", "el", "eventListener", "off", "clientY", "target", "selector", "doc", "item", "event", "triggers", "trigger", "stored", "_SelectionArea", "EventTarget", "opt", "_c", "_d", "document", "selectionAreaClass", "features", "y", "evt", "behaviour", "resolvedBoundaries", "intersect", "e", "left", "top", "right", "bottom", "reference", "preceding", "following", "startThreshold", "abs", "x1", "on", "css", "_clippingElement", "tr", "_scrollSpeed", "_targetElement", "_areaLocation", "_scrollDelta", "scrollLeft", "deltaY", "manualSpeed", "x2", "_targetRect", "x3", "y3", "y1", "x4", "y4", "max", "_selectables", "node", "_areaRect", "selected", "invert", "keep", "overlap", "i", "_selection", "_options", "addedElements", "changed", "includeStored", "quiet", "elements"] -} diff --git a/frontend/node_modules/.vite/deps/_metadata.json b/frontend/node_modules/.vite/deps/_metadata.json index 8fa7431..a6b515a 100644 --- a/frontend/node_modules/.vite/deps/_metadata.json +++ b/frontend/node_modules/.vite/deps/_metadata.json @@ -1,83 +1,77 @@ { - "hash": "76772e52", - "browserHash": "a4ef7769", + "hash": "94dd0fae", + "browserHash": "b8442f90", "optimized": { "axios": { "src": "../../axios/index.js", "file": "axios.js", - "fileHash": "923e7809", - "needsInterop": false - }, - "mammoth": { - "src": "../../mammoth/lib/index.js", - "file": "mammoth.js", - "fileHash": "2d23e669", - "needsInterop": true - }, - "marked": { - "src": "../../marked/lib/marked.esm.js", - "file": "marked.js", - "fileHash": "e6802b70", - "needsInterop": false - }, - "pdfjs-dist": { - "src": "../../pdfjs-dist/build/pdf.mjs", - "file": "pdfjs-dist.js", - "fileHash": "b0d6a144", - "needsInterop": false - }, - "prismjs": { - "src": "../../prismjs/prism.js", - "file": "prismjs.js", - "fileHash": "0c7d8fc7", - "needsInterop": true - }, - "prismjs/components/prism-css": { - "src": "../../prismjs/components/prism-css.js", - "file": "prismjs_components_prism-css.js", - "fileHash": "b5dc8638", - "needsInterop": true - }, - "prismjs/components/prism-javascript": { - "src": "../../prismjs/components/prism-javascript.js", - "file": "prismjs_components_prism-javascript.js", - "fileHash": "a3fb501c", - "needsInterop": true - }, - "prismjs/components/prism-json": { - "src": "../../prismjs/components/prism-json.js", - "file": "prismjs_components_prism-json.js", - "fileHash": "2d44f86b", - "needsInterop": true - }, - "prismjs/components/prism-python": { - "src": "../../prismjs/components/prism-python.js", - "file": "prismjs_components_prism-python.js", - "fileHash": "ca5259af", - "needsInterop": true - }, - "prismjs/components/prism-sql": { - "src": "../../prismjs/components/prism-sql.js", - "file": "prismjs_components_prism-sql.js", - "fileHash": "4a89443c", - "needsInterop": true - }, - "vue": { - "src": "../../vue/dist/vue.runtime.esm-bundler.js", - "file": "vue.js", - "fileHash": "b4ce9a46", + "fileHash": "d8567397", "needsInterop": false }, "katex": { "src": "../../katex/dist/katex.mjs", "file": "katex.js", - "fileHash": "e7ed5c7a", + "fileHash": "7dd124eb", "needsInterop": false }, - "@viselect/vanilla": { - "src": "../../../src/lib/mind-elixir/node_modules/@viselect/vanilla/dist/viselect.mjs", - "file": "@viselect_vanilla.js", - "fileHash": "b39569df", + "mammoth": { + "src": "../../mammoth/lib/index.js", + "file": "mammoth.js", + "fileHash": "9aaed3ae", + "needsInterop": true + }, + "marked": { + "src": "../../marked/lib/marked.esm.js", + "file": "marked.js", + "fileHash": "d5cd504b", + "needsInterop": false + }, + "pdfjs-dist": { + "src": "../../pdfjs-dist/build/pdf.mjs", + "file": "pdfjs-dist.js", + "fileHash": "4804df17", + "needsInterop": false + }, + "prismjs": { + "src": "../../prismjs/prism.js", + "file": "prismjs.js", + "fileHash": "13932d2e", + "needsInterop": true + }, + "prismjs/components/prism-css": { + "src": "../../prismjs/components/prism-css.js", + "file": "prismjs_components_prism-css.js", + "fileHash": "f24b2e04", + "needsInterop": true + }, + "prismjs/components/prism-javascript": { + "src": "../../prismjs/components/prism-javascript.js", + "file": "prismjs_components_prism-javascript.js", + "fileHash": "b44ed50e", + "needsInterop": true + }, + "prismjs/components/prism-json": { + "src": "../../prismjs/components/prism-json.js", + "file": "prismjs_components_prism-json.js", + "fileHash": "0d3b4905", + "needsInterop": true + }, + "prismjs/components/prism-python": { + "src": "../../prismjs/components/prism-python.js", + "file": "prismjs_components_prism-python.js", + "fileHash": "f1831121", + "needsInterop": true + }, + "prismjs/components/prism-sql": { + "src": "../../prismjs/components/prism-sql.js", + "file": "prismjs_components_prism-sql.js", + "fileHash": "e04f8e66", + "needsInterop": true + }, + "vue": { + "src": "../../vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "cba89b1c", "needsInterop": false } }, diff --git a/frontend/node_modules/.vue-global-types/vue_99_0.d.ts b/frontend/node_modules/.vue-global-types/vue_99_0.d.ts index e00c616..f0fe46c 100644 --- a/frontend/node_modules/.vue-global-types/vue_99_0.d.ts +++ b/frontend/node_modules/.vue-global-types/vue_99_0.d.ts @@ -15,13 +15,13 @@ export {}; type __VLS_PickNotAny = __VLS_IsAny extends true ? B : A; type __VLS_SpreadMerge = Omit & B; type __VLS_WithComponent = - N1 extends keyof LocalComponents ? N1 extends N0 ? Pick : { [K in N0]: LocalComponents[N1] } : - N2 extends keyof LocalComponents ? N2 extends N0 ? Pick : { [K in N0]: LocalComponents[N2] } : - N3 extends keyof LocalComponents ? N3 extends N0 ? Pick : { [K in N0]: LocalComponents[N3] } : + N1 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N1] } : + N2 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N2] } : + N3 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N3] } : Self extends object ? { [K in N0]: Self } : - N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N1] } : - N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N2] } : - N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N3] } : + N1 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N1] } : + N2 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N2] } : + N3 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N3] } : {}; type __VLS_FunctionalComponentCtx = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny ? K extends { __ctx?: infer Ctx } ? NonNullable : never : any @@ -83,6 +83,10 @@ export {}; } > >; + type __VLS_EmitsToProps = __VLS_PrettifyGlobal<{ + [K in string & keyof T as `on${Capitalize}`]?: + (...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any; + }>; type __VLS_ResolveEmits< Comp, Emits, @@ -90,10 +94,16 @@ export {}; NormalizedEmits = __VLS_NormalizeEmits extends infer E ? string extends keyof E ? {} : E : never, > = __VLS_SpreadMerge; type __VLS_ResolveDirectives = { - [K in Exclude & string as `v${Capitalize}`]: T[K]; + [K in keyof T & string as `v${Capitalize}`]: T[K]; }; type __VLS_PrettifyGlobal = { [K in keyof T as K]: T[K]; } & {}; + type __VLS_WithDefaultsGlobal = { + [K in keyof P as K extends keyof D ? K : never]-?: P[K]; + } & { + [K in keyof P as K extends keyof D ? never : K]: P[K]; + }; type __VLS_UseTemplateRef = Readonly>; + type __VLS_ProxyRefs = import('vue').ShallowUnwrapRef; function __VLS_getVForSourceType>(source: T): [ item: T extends number ? number @@ -115,7 +125,6 @@ export {}; : T extends (...args: any) => any ? T : (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void; - function __VLS_makeOptional(t: T): { [K in keyof T]?: T[K] }; function __VLS_asFunctionalComponent any ? InstanceType : unknown>(t: T, instance?: K): T extends new (...args: any) => any ? __VLS_FunctionalComponent : T extends () => any ? (props: {}, ctx?: any) => ReturnType diff --git a/frontend/src/.DS_Store b/frontend/src/.DS_Store new file mode 100644 index 0000000..160ac09 Binary files /dev/null and b/frontend/src/.DS_Store differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue index baa3312..8e58df9 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,6 +1,6 @@