From 3b39f86f83b69ca75361796e0086d608422295a9 Mon Sep 17 00:00:00 2001 From: lixinran Date: Thu, 9 Oct 2025 14:20:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=80=9D=E7=BB=B4?= =?UTF-8?q?=E5=AF=BC=E5=9B=BE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复新增节点居中逻辑,从当前位置平滑移动到新节点 - 实现节点拖拽保存到数据库功能 - 移除所有'正在加载'弹窗提示 - 优化删除节点时的位置保持 - 添加节点拖拽成功/失败通知 --- .DS_Store | Bin 6148 -> 8196 bytes backend/mindmap.db | Bin 3022848 -> 3092480 bytes frontend/.DS_Store | Bin 0 -> 6148 bytes .../.vite/deps/@viselect_vanilla.js | 470 ------------ .../.vite/deps/@viselect_vanilla.js.map | 7 - .../node_modules/.vite/deps/_metadata.json | 130 ++-- .../.vue-global-types/vue_99_0.d.ts | 25 +- frontend/src/.DS_Store | Bin 0 -> 6148 bytes frontend/src/App.vue | 2 +- frontend/src/components/AISidebar.vue | 30 +- frontend/src/components/MindMap.vue | 679 ++++++++++-------- frontend/src/lib/.DS_Store | Bin 0 -> 6148 bytes 12 files changed, 475 insertions(+), 868 deletions(-) create mode 100644 frontend/.DS_Store delete mode 100644 frontend/node_modules/.vite/deps/@viselect_vanilla.js delete mode 100644 frontend/node_modules/.vite/deps/@viselect_vanilla.js.map create mode 100644 frontend/src/.DS_Store create mode 100644 frontend/src/lib/.DS_Store diff --git a/.DS_Store b/.DS_Store index 522f33c5b03858971e4d5a2b85a81418f79e06dc..73839c756f74e9ca6966347b63354fea99884619 100644 GIT binary patch literal 8196 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
« -
+

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 x{`}RM*36E%+8eT}1_H delta 10465 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 TF);`YME(e98e|d%ewBfDuiLLZ literal 0 HcmV?d00001 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": "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", - "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 0000000000000000000000000000000000000000..160ac09a2e1720d3b92ba79060cc4aa5c0df7d01 GIT binary patch literal 6148 zcmeHKJ5Iwu5S<|@EKsCKG%5EADe0EToFEqfClVkz+9(peJ6a?Tm5wt|a1h>nAdW1c zqktJ{_IYRK?aHt4c!-D>59>M6l!z+0AU(=5G|7t(?8GBuAj=u^<*ID95a{dHbSSSz*gaV;JDDbZp zK+hJd&J1G>1ww&P;8OwlJ|wtccI*uG(}6`t0HFNFtKnH^31E@{FgtdJh``vWK%=sc z7;JRJlh