/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => PathFinderPlugin }); module.exports = __toCommonJS(main_exports); var import_obsidian8 = require("obsidian"); // src/algorithms/graph/weighted_graph.ts var Edge = class { constructor(source, target, weight, next) { this.source = source; this.target = target; this.weight = weight; this.next = next; } toString() { return `u: ${this.source}, v: ${this.target}, w: ${this.weight}, next:${this.next}`; } }; var WeightedGraph = class { constructor() { this.nodeCount = 0; this.edges = [new Edge(0, 0, 0, -1)]; this.head = [0]; this.edgeID = /* @__PURE__ */ new Map(); } addEdge(source, target, weight) { this.nodeCount = Math.max(this.nodeCount, Math.max(source, target)); if (this.edgeID.has(`${source},${target}`)) return; this.edges.push( new Edge(source, target, weight, this.head[source] ?? -1) ); this.head[source] = this.edges.length - 1; this.edgeID.set(`${source},${target}`, this.head[source]); } *getOutEdges(source) { if (this.head[source] === void 0) return; for (let i = this.head[source]; this.edges[i] !== void 0; i = this.edges[i].next) { yield this.edges[i]; } return; } getNodeCount() { return this.nodeCount; } getEdgeCount() { return this.edges.length - 1; } toString() { let ret = ""; for (let x2 of this.edges) { ret += x2.toString() + "\n"; } for (let i = 1; i < this.head.length; i++) { ret += `head[${i}]=${this.head[i]} `; } return ret; } }; // src/algorithms/graph/weighted_graph_with_node_id.ts var WeightedGraphWithNodeID = class extends WeightedGraph { constructor() { super(); this.nameToID = /* @__PURE__ */ new Map(); this.IDToName = /* @__PURE__ */ new Map(); } addVerticeAndReturnID(name) { if (this.getID(name) === void 0) this.addVertice(name); return this.getID(name); } addVertice(name) { this.nodeCount++; this.nameToID.set(name, this.nodeCount); this.IDToName.set(this.nodeCount, name); } getID(name) { return this.nameToID.get(name); } getName(id2) { return this.IDToName.get(id2); } addEdgeExtended(source, target, weight) { super.addEdge( this.addVerticeAndReturnID(source), this.addVerticeAndReturnID(target), weight ); } }; // src/modals.ts var import_obsidian3 = require("obsidian"); // src/suggest.ts var import_obsidian = require("obsidian"); // node_modules/@popperjs/core/lib/enums.js var top = "top"; var bottom = "bottom"; var right = "right"; var left = "left"; var auto = "auto"; var basePlacements = [top, bottom, right, left]; var start = "start"; var end = "end"; var clippingParents = "clippingParents"; var viewport = "viewport"; var popper = "popper"; var reference = "reference"; var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { return acc.concat([placement + "-" + start, placement + "-" + end]); }, []); var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { return acc.concat([placement, placement + "-" + start, placement + "-" + end]); }, []); var beforeRead = "beforeRead"; var read = "read"; var afterRead = "afterRead"; var beforeMain = "beforeMain"; var main = "main"; var afterMain = "afterMain"; var beforeWrite = "beforeWrite"; var write = "write"; var afterWrite = "afterWrite"; var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; // node_modules/@popperjs/core/lib/dom-utils/getNodeName.js function getNodeName(element) { return element ? (element.nodeName || "").toLowerCase() : null; } // node_modules/@popperjs/core/lib/dom-utils/getWindow.js function getWindow(node) { if (node == null) { return window; } if (node.toString() !== "[object Window]") { var ownerDocument = node.ownerDocument; return ownerDocument ? ownerDocument.defaultView || window : window; } return node; } // node_modules/@popperjs/core/lib/dom-utils/instanceOf.js function isElement(node) { var OwnElement = getWindow(node).Element; return node instanceof OwnElement || node instanceof Element; } function isHTMLElement(node) { var OwnElement = getWindow(node).HTMLElement; return node instanceof OwnElement || node instanceof HTMLElement; } function isShadowRoot(node) { if (typeof ShadowRoot === "undefined") { return false; } var OwnElement = getWindow(node).ShadowRoot; return node instanceof OwnElement || node instanceof ShadowRoot; } // node_modules/@popperjs/core/lib/modifiers/applyStyles.js function applyStyles(_ref) { var state = _ref.state; Object.keys(state.elements).forEach(function(name) { var style = state.styles[name] || {}; var attributes = state.attributes[name] || {}; var element = state.elements[name]; if (!isHTMLElement(element) || !getNodeName(element)) { return; } Object.assign(element.style, style); Object.keys(attributes).forEach(function(name2) { var value = attributes[name2]; if (value === false) { element.removeAttribute(name2); } else { element.setAttribute(name2, value === true ? "" : value); } }); }); } function effect(_ref2) { var state = _ref2.state; var initialStyles = { popper: { position: state.options.strategy, left: "0", top: "0", margin: "0" }, arrow: { position: "absolute" }, reference: {} }; Object.assign(state.elements.popper.style, initialStyles.popper); state.styles = initialStyles; if (state.elements.arrow) { Object.assign(state.elements.arrow.style, initialStyles.arrow); } return function() { Object.keys(state.elements).forEach(function(name) { var element = state.elements[name]; var attributes = state.attributes[name] || {}; var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); var style = styleProperties.reduce(function(style2, property) { style2[property] = ""; return style2; }, {}); if (!isHTMLElement(element) || !getNodeName(element)) { return; } Object.assign(element.style, style); Object.keys(attributes).forEach(function(attribute) { element.removeAttribute(attribute); }); }); }; } var applyStyles_default = { name: "applyStyles", enabled: true, phase: "write", fn: applyStyles, effect, requires: ["computeStyles"] }; // node_modules/@popperjs/core/lib/utils/getBasePlacement.js function getBasePlacement(placement) { return placement.split("-")[0]; } // node_modules/@popperjs/core/lib/utils/math.js var max = Math.max; var min = Math.min; var round = Math.round; // node_modules/@popperjs/core/lib/utils/userAgent.js function getUAString() { var uaData = navigator.userAgentData; if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { return uaData.brands.map(function(item) { return item.brand + "/" + item.version; }).join(" "); } return navigator.userAgent; } // node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js function isLayoutViewport() { return !/^((?!chrome|android).)*safari/i.test(getUAString()); } // node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js function getBoundingClientRect(element, includeScale, isFixedStrategy) { if (includeScale === void 0) { includeScale = false; } if (isFixedStrategy === void 0) { isFixedStrategy = false; } var clientRect = element.getBoundingClientRect(); var scaleX = 1; var scaleY = 1; if (includeScale && isHTMLElement(element)) { scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; } var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport; var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; var x2 = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; var y2 = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; var width = clientRect.width / scaleX; var height = clientRect.height / scaleY; return { width, height, top: y2, right: x2 + width, bottom: y2 + height, left: x2, x: x2, y: y2 }; } // node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js function getLayoutRect(element) { var clientRect = getBoundingClientRect(element); var width = element.offsetWidth; var height = element.offsetHeight; if (Math.abs(clientRect.width - width) <= 1) { width = clientRect.width; } if (Math.abs(clientRect.height - height) <= 1) { height = clientRect.height; } return { x: element.offsetLeft, y: element.offsetTop, width, height }; } // node_modules/@popperjs/core/lib/dom-utils/contains.js function contains(parent, child) { var rootNode = child.getRootNode && child.getRootNode(); if (parent.contains(child)) { return true; } else if (rootNode && isShadowRoot(rootNode)) { var next = child; do { if (next && parent.isSameNode(next)) { return true; } next = next.parentNode || next.host; } while (next); } return false; } // node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js function getComputedStyle(element) { return getWindow(element).getComputedStyle(element); } // node_modules/@popperjs/core/lib/dom-utils/isTableElement.js function isTableElement(element) { return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; } // node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js function getDocumentElement(element) { return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement; } // node_modules/@popperjs/core/lib/dom-utils/getParentNode.js function getParentNode(element) { if (getNodeName(element) === "html") { return element; } return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element); } // node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js function getTrueOffsetParent(element) { if (!isHTMLElement(element) || getComputedStyle(element).position === "fixed") { return null; } return element.offsetParent; } function getContainingBlock(element) { var isFirefox = /firefox/i.test(getUAString()); var isIE = /Trident/i.test(getUAString()); if (isIE && isHTMLElement(element)) { var elementCss = getComputedStyle(element); if (elementCss.position === "fixed") { return null; } } var currentNode = getParentNode(element); if (isShadowRoot(currentNode)) { currentNode = currentNode.host; } while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { var css = getComputedStyle(currentNode); if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { return currentNode; } else { currentNode = currentNode.parentNode; } } return null; } function getOffsetParent(element) { var window2 = getWindow(element); var offsetParent = getTrueOffsetParent(element); while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === "static") { offsetParent = getTrueOffsetParent(offsetParent); } if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle(offsetParent).position === "static")) { return window2; } return offsetParent || getContainingBlock(element) || window2; } // node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js function getMainAxisFromPlacement(placement) { return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; } // node_modules/@popperjs/core/lib/utils/within.js function within(min3, value, max3) { return max(min3, min(value, max3)); } function withinMaxClamp(min3, value, max3) { var v = within(min3, value, max3); return v > max3 ? max3 : v; } // node_modules/@popperjs/core/lib/utils/getFreshSideObject.js function getFreshSideObject() { return { top: 0, right: 0, bottom: 0, left: 0 }; } // node_modules/@popperjs/core/lib/utils/mergePaddingObject.js function mergePaddingObject(paddingObject) { return Object.assign({}, getFreshSideObject(), paddingObject); } // node_modules/@popperjs/core/lib/utils/expandToHashMap.js function expandToHashMap(value, keys) { return keys.reduce(function(hashMap, key) { hashMap[key] = value; return hashMap; }, {}); } // node_modules/@popperjs/core/lib/modifiers/arrow.js var toPaddingObject = function toPaddingObject2(padding, state) { padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { placement: state.placement })) : padding; return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); }; function arrow(_ref) { var _state$modifiersData$; var state = _ref.state, name = _ref.name, options = _ref.options; var arrowElement = state.elements.arrow; var popperOffsets2 = state.modifiersData.popperOffsets; var basePlacement = getBasePlacement(state.placement); var axis = getMainAxisFromPlacement(basePlacement); var isVertical = [left, right].indexOf(basePlacement) >= 0; var len = isVertical ? "height" : "width"; if (!arrowElement || !popperOffsets2) { return; } var paddingObject = toPaddingObject(options.padding, state); var arrowRect = getLayoutRect(arrowElement); var minProp = axis === "y" ? top : left; var maxProp = axis === "y" ? bottom : right; var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; var arrowOffsetParent = getOffsetParent(arrowElement); var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; var centerToReference = endDiff / 2 - startDiff / 2; var min3 = paddingObject[minProp]; var max3 = clientSize - arrowRect[len] - paddingObject[maxProp]; var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; var offset2 = within(min3, center, max3); var axisProp = axis; state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); } function effect2(_ref2) { var state = _ref2.state, options = _ref2.options; var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; if (arrowElement == null) { return; } if (typeof arrowElement === "string") { arrowElement = state.elements.popper.querySelector(arrowElement); if (!arrowElement) { return; } } if (true) { if (!isHTMLElement(arrowElement)) { console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" ")); } } if (!contains(state.elements.popper, arrowElement)) { if (true) { console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" ")); } return; } state.elements.arrow = arrowElement; } var arrow_default = { name: "arrow", enabled: true, phase: "main", fn: arrow, effect: effect2, requires: ["popperOffsets"], requiresIfExists: ["preventOverflow"] }; // node_modules/@popperjs/core/lib/utils/getVariation.js function getVariation(placement) { return placement.split("-")[1]; } // node_modules/@popperjs/core/lib/modifiers/computeStyles.js var unsetSides = { top: "auto", right: "auto", bottom: "auto", left: "auto" }; function roundOffsetsByDPR(_ref, win) { var x2 = _ref.x, y2 = _ref.y; var dpr = win.devicePixelRatio || 1; return { x: round(x2 * dpr) / dpr || 0, y: round(y2 * dpr) / dpr || 0 }; } function mapToStyles(_ref2) { var _Object$assign2; var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; var _offsets$x = offsets.x, x2 = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y2 = _offsets$y === void 0 ? 0 : _offsets$y; var _ref3 = typeof roundOffsets === "function" ? roundOffsets({ x: x2, y: y2 }) : { x: x2, y: y2 }; x2 = _ref3.x; y2 = _ref3.y; var hasX = offsets.hasOwnProperty("x"); var hasY = offsets.hasOwnProperty("y"); var sideX = left; var sideY = top; var win = window; if (adaptive) { var offsetParent = getOffsetParent(popper2); var heightProp = "clientHeight"; var widthProp = "clientWidth"; if (offsetParent === getWindow(popper2)) { offsetParent = getDocumentElement(popper2); if (getComputedStyle(offsetParent).position !== "static" && position === "absolute") { heightProp = "scrollHeight"; widthProp = "scrollWidth"; } } offsetParent = offsetParent; if (placement === top || (placement === left || placement === right) && variation === end) { sideY = bottom; var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp]; y2 -= offsetY - popperRect.height; y2 *= gpuAcceleration ? 1 : -1; } if (placement === left || (placement === top || placement === bottom) && variation === end) { sideX = right; var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp]; x2 -= offsetX - popperRect.width; x2 *= gpuAcceleration ? 1 : -1; } } var commonStyles = Object.assign({ position }, adaptive && unsetSides); var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ x: x2, y: y2 }, getWindow(popper2)) : { x: x2, y: y2 }; x2 = _ref4.x; y2 = _ref4.y; if (gpuAcceleration) { var _Object$assign; return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x2 + "px, " + y2 + "px)" : "translate3d(" + x2 + "px, " + y2 + "px, 0)", _Object$assign)); } return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y2 + "px" : "", _Object$assign2[sideX] = hasX ? x2 + "px" : "", _Object$assign2.transform = "", _Object$assign2)); } function computeStyles(_ref5) { var state = _ref5.state, options = _ref5.options; var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; if (true) { var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || ""; if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) { return transitionProperty.indexOf(property) >= 0; })) { console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" ")); } } var commonStyles = { placement: getBasePlacement(state.placement), variation: getVariation(state.placement), popper: state.elements.popper, popperRect: state.rects.popper, gpuAcceleration, isFixed: state.options.strategy === "fixed" }; if (state.modifiersData.popperOffsets != null) { state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { offsets: state.modifiersData.popperOffsets, position: state.options.strategy, adaptive, roundOffsets }))); } if (state.modifiersData.arrow != null) { state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { offsets: state.modifiersData.arrow, position: "absolute", adaptive: false, roundOffsets }))); } state.attributes.popper = Object.assign({}, state.attributes.popper, { "data-popper-placement": state.placement }); } var computeStyles_default = { name: "computeStyles", enabled: true, phase: "beforeWrite", fn: computeStyles, data: {} }; // node_modules/@popperjs/core/lib/modifiers/eventListeners.js var passive = { passive: true }; function effect3(_ref) { var state = _ref.state, instance = _ref.instance, options = _ref.options; var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; var window2 = getWindow(state.elements.popper); var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); if (scroll) { scrollParents.forEach(function(scrollParent) { scrollParent.addEventListener("scroll", instance.update, passive); }); } if (resize) { window2.addEventListener("resize", instance.update, passive); } return function() { if (scroll) { scrollParents.forEach(function(scrollParent) { scrollParent.removeEventListener("scroll", instance.update, passive); }); } if (resize) { window2.removeEventListener("resize", instance.update, passive); } }; } var eventListeners_default = { name: "eventListeners", enabled: true, phase: "write", fn: function fn() { }, effect: effect3, data: {} }; // node_modules/@popperjs/core/lib/utils/getOppositePlacement.js var hash = { left: "right", right: "left", bottom: "top", top: "bottom" }; function getOppositePlacement(placement) { return placement.replace(/left|right|bottom|top/g, function(matched) { return hash[matched]; }); } // node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js var hash2 = { start: "end", end: "start" }; function getOppositeVariationPlacement(placement) { return placement.replace(/start|end/g, function(matched) { return hash2[matched]; }); } // node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js function getWindowScroll(node) { var win = getWindow(node); var scrollLeft = win.pageXOffset; var scrollTop = win.pageYOffset; return { scrollLeft, scrollTop }; } // node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js function getWindowScrollBarX(element) { return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; } // node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js function getViewportRect(element, strategy) { var win = getWindow(element); var html = getDocumentElement(element); var visualViewport = win.visualViewport; var width = html.clientWidth; var height = html.clientHeight; var x2 = 0; var y2 = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; var layoutViewport = isLayoutViewport(); if (layoutViewport || !layoutViewport && strategy === "fixed") { x2 = visualViewport.offsetLeft; y2 = visualViewport.offsetTop; } } return { width, height, x: x2 + getWindowScrollBarX(element), y: y2 }; } // node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js function getDocumentRect(element) { var _element$ownerDocumen; var html = getDocumentElement(element); var winScroll = getWindowScroll(element); var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); var x2 = -winScroll.scrollLeft + getWindowScrollBarX(element); var y2 = -winScroll.scrollTop; if (getComputedStyle(body || html).direction === "rtl") { x2 += max(html.clientWidth, body ? body.clientWidth : 0) - width; } return { width, height, x: x2, y: y2 }; } // node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js function isScrollParent(element) { var _getComputedStyle = getComputedStyle(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); } // node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js function getScrollParent(node) { if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { return node.ownerDocument.body; } if (isHTMLElement(node) && isScrollParent(node)) { return node; } return getScrollParent(getParentNode(node)); } // node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js function listScrollParents(element, list) { var _element$ownerDocumen; if (list === void 0) { list = []; } var scrollParent = getScrollParent(element); var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); var win = getWindow(scrollParent); var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; var updatedList = list.concat(target); return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target))); } // node_modules/@popperjs/core/lib/utils/rectToClientRect.js function rectToClientRect(rect) { return Object.assign({}, rect, { left: rect.x, top: rect.y, right: rect.x + rect.width, bottom: rect.y + rect.height }); } // node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js function getInnerBoundingClientRect(element, strategy) { var rect = getBoundingClientRect(element, false, strategy === "fixed"); rect.top = rect.top + element.clientTop; rect.left = rect.left + element.clientLeft; rect.bottom = rect.top + element.clientHeight; rect.right = rect.left + element.clientWidth; rect.width = element.clientWidth; rect.height = element.clientHeight; rect.x = rect.left; rect.y = rect.top; return rect; } function getClientRectFromMixedType(element, clippingParent, strategy) { return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); } function getClippingParents(element) { var clippingParents2 = listScrollParents(getParentNode(element)); var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle(element).position) >= 0; var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; if (!isElement(clipperElement)) { return []; } return clippingParents2.filter(function(clippingParent) { return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body"; }); } function getClippingRect(element, boundary, rootBoundary, strategy) { var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); var firstClippingParent = clippingParents2[0]; var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { var rect = getClientRectFromMixedType(element, clippingParent, strategy); accRect.top = max(rect.top, accRect.top); accRect.right = min(rect.right, accRect.right); accRect.bottom = min(rect.bottom, accRect.bottom); accRect.left = max(rect.left, accRect.left); return accRect; }, getClientRectFromMixedType(element, firstClippingParent, strategy)); clippingRect.width = clippingRect.right - clippingRect.left; clippingRect.height = clippingRect.bottom - clippingRect.top; clippingRect.x = clippingRect.left; clippingRect.y = clippingRect.top; return clippingRect; } // node_modules/@popperjs/core/lib/utils/computeOffsets.js function computeOffsets(_ref) { var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; var basePlacement = placement ? getBasePlacement(placement) : null; var variation = placement ? getVariation(placement) : null; var commonX = reference2.x + reference2.width / 2 - element.width / 2; var commonY = reference2.y + reference2.height / 2 - element.height / 2; var offsets; switch (basePlacement) { case top: offsets = { x: commonX, y: reference2.y - element.height }; break; case bottom: offsets = { x: commonX, y: reference2.y + reference2.height }; break; case right: offsets = { x: reference2.x + reference2.width, y: commonY }; break; case left: offsets = { x: reference2.x - element.width, y: commonY }; break; default: offsets = { x: reference2.x, y: reference2.y }; } var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; if (mainAxis != null) { var len = mainAxis === "y" ? "height" : "width"; switch (variation) { case start: offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); break; case end: offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); break; default: } } return offsets; } // node_modules/@popperjs/core/lib/utils/detectOverflow.js function detectOverflow(state, options) { if (options === void 0) { options = {}; } var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); var altContext = elementContext === popper ? reference : popper; var popperRect = state.rects.popper; var element = state.elements[altBoundary ? altContext : elementContext]; var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); var referenceClientRect = getBoundingClientRect(state.elements.reference); var popperOffsets2 = computeOffsets({ reference: referenceClientRect, element: popperRect, strategy: "absolute", placement }); var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; var overflowOffsets = { top: clippingClientRect.top - elementClientRect.top + paddingObject.top, bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, left: clippingClientRect.left - elementClientRect.left + paddingObject.left, right: elementClientRect.right - clippingClientRect.right + paddingObject.right }; var offsetData = state.modifiersData.offset; if (elementContext === popper && offsetData) { var offset2 = offsetData[placement]; Object.keys(overflowOffsets).forEach(function(key) { var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; overflowOffsets[key] += offset2[axis] * multiply; }); } return overflowOffsets; } // node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js function computeAutoPlacement(state, options) { if (options === void 0) { options = {}; } var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; var variation = getVariation(placement); var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { return getVariation(placement2) === variation; }) : basePlacements; var allowedPlacements = placements2.filter(function(placement2) { return allowedAutoPlacements.indexOf(placement2) >= 0; }); if (allowedPlacements.length === 0) { allowedPlacements = placements2; if (true) { console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" ")); } } var overflows = allowedPlacements.reduce(function(acc, placement2) { acc[placement2] = detectOverflow(state, { placement: placement2, boundary, rootBoundary, padding })[getBasePlacement(placement2)]; return acc; }, {}); return Object.keys(overflows).sort(function(a2, b) { return overflows[a2] - overflows[b]; }); } // node_modules/@popperjs/core/lib/modifiers/flip.js function getExpandedFallbackPlacements(placement) { if (getBasePlacement(placement) === auto) { return []; } var oppositePlacement = getOppositePlacement(placement); return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; } function flip(_ref) { var state = _ref.state, options = _ref.options, name = _ref.name; if (state.modifiersData[name]._skip) { return; } var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; var preferredPlacement = state.options.placement; var basePlacement = getBasePlacement(preferredPlacement); var isBasePlacement = basePlacement === preferredPlacement; var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { placement: placement2, boundary, rootBoundary, padding, flipVariations, allowedAutoPlacements }) : placement2); }, []); var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var checksMap = /* @__PURE__ */ new Map(); var makeFallbackChecks = true; var firstFittingPlacement = placements2[0]; for (var i = 0; i < placements2.length; i++) { var placement = placements2[i]; var _basePlacement = getBasePlacement(placement); var isStartVariation = getVariation(placement) === start; var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; var len = isVertical ? "width" : "height"; var overflow = detectOverflow(state, { placement, boundary, rootBoundary, altBoundary, padding }); var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; if (referenceRect[len] > popperRect[len]) { mainVariationSide = getOppositePlacement(mainVariationSide); } var altVariationSide = getOppositePlacement(mainVariationSide); var checks = []; if (checkMainAxis) { checks.push(overflow[_basePlacement] <= 0); } if (checkAltAxis) { checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); } if (checks.every(function(check) { return check; })) { firstFittingPlacement = placement; makeFallbackChecks = false; break; } checksMap.set(placement, checks); } if (makeFallbackChecks) { var numberOfChecks = flipVariations ? 3 : 1; var _loop = function _loop2(_i2) { var fittingPlacement = placements2.find(function(placement2) { var checks2 = checksMap.get(placement2); if (checks2) { return checks2.slice(0, _i2).every(function(check) { return check; }); } }); if (fittingPlacement) { firstFittingPlacement = fittingPlacement; return "break"; } }; for (var _i = numberOfChecks; _i > 0; _i--) { var _ret = _loop(_i); if (_ret === "break") break; } } if (state.placement !== firstFittingPlacement) { state.modifiersData[name]._skip = true; state.placement = firstFittingPlacement; state.reset = true; } } var flip_default = { name: "flip", enabled: true, phase: "main", fn: flip, requiresIfExists: ["offset"], data: { _skip: false } }; // node_modules/@popperjs/core/lib/modifiers/hide.js function getSideOffsets(overflow, rect, preventedOffsets) { if (preventedOffsets === void 0) { preventedOffsets = { x: 0, y: 0 }; } return { top: overflow.top - rect.height - preventedOffsets.y, right: overflow.right - rect.width + preventedOffsets.x, bottom: overflow.bottom - rect.height + preventedOffsets.y, left: overflow.left - rect.width - preventedOffsets.x }; } function isAnySideFullyClipped(overflow) { return [top, right, bottom, left].some(function(side) { return overflow[side] >= 0; }); } function hide(_ref) { var state = _ref.state, name = _ref.name; var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var preventedOffsets = state.modifiersData.preventOverflow; var referenceOverflow = detectOverflow(state, { elementContext: "reference" }); var popperAltOverflow = detectOverflow(state, { altBoundary: true }); var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); state.modifiersData[name] = { referenceClippingOffsets, popperEscapeOffsets, isReferenceHidden, hasPopperEscaped }; state.attributes.popper = Object.assign({}, state.attributes.popper, { "data-popper-reference-hidden": isReferenceHidden, "data-popper-escaped": hasPopperEscaped }); } var hide_default = { name: "hide", enabled: true, phase: "main", requiresIfExists: ["preventOverflow"], fn: hide }; // node_modules/@popperjs/core/lib/modifiers/offset.js function distanceAndSkiddingToXY(placement, rects, offset2) { var basePlacement = getBasePlacement(placement); var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { placement })) : offset2, skidding = _ref[0], distance = _ref[1]; skidding = skidding || 0; distance = (distance || 0) * invertDistance; return [left, right].indexOf(basePlacement) >= 0 ? { x: distance, y: skidding } : { x: skidding, y: distance }; } function offset(_ref2) { var state = _ref2.state, options = _ref2.options, name = _ref2.name; var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; var data = placements.reduce(function(acc, placement) { acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); return acc; }, {}); var _data$state$placement = data[state.placement], x2 = _data$state$placement.x, y2 = _data$state$placement.y; if (state.modifiersData.popperOffsets != null) { state.modifiersData.popperOffsets.x += x2; state.modifiersData.popperOffsets.y += y2; } state.modifiersData[name] = data; } var offset_default = { name: "offset", enabled: true, phase: "main", requires: ["popperOffsets"], fn: offset }; // node_modules/@popperjs/core/lib/modifiers/popperOffsets.js function popperOffsets(_ref) { var state = _ref.state, name = _ref.name; state.modifiersData[name] = computeOffsets({ reference: state.rects.reference, element: state.rects.popper, strategy: "absolute", placement: state.placement }); } var popperOffsets_default = { name: "popperOffsets", enabled: true, phase: "read", fn: popperOffsets, data: {} }; // node_modules/@popperjs/core/lib/utils/getAltAxis.js function getAltAxis(axis) { return axis === "x" ? "y" : "x"; } // node_modules/@popperjs/core/lib/modifiers/preventOverflow.js function preventOverflow(_ref) { var state = _ref.state, options = _ref.options, name = _ref.name; var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; var overflow = detectOverflow(state, { boundary, rootBoundary, padding, altBoundary }); var basePlacement = getBasePlacement(state.placement); var variation = getVariation(state.placement); var isBasePlacement = !variation; var mainAxis = getMainAxisFromPlacement(basePlacement); var altAxis = getAltAxis(mainAxis); var popperOffsets2 = state.modifiersData.popperOffsets; var referenceRect = state.rects.reference; var popperRect = state.rects.popper; var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { placement: state.placement })) : tetherOffset; var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue } : Object.assign({ mainAxis: 0, altAxis: 0 }, tetherOffsetValue); var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; var data = { x: 0, y: 0 }; if (!popperOffsets2) { return; } if (checkMainAxis) { var _offsetModifierState$; var mainSide = mainAxis === "y" ? top : left; var altSide = mainAxis === "y" ? bottom : right; var len = mainAxis === "y" ? "height" : "width"; var offset2 = popperOffsets2[mainAxis]; var min3 = offset2 + overflow[mainSide]; var max3 = offset2 - overflow[altSide]; var additive = tether ? -popperRect[len] / 2 : 0; var minLen = variation === start ? referenceRect[len] : popperRect[len]; var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; var arrowElement = state.elements.arrow; var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { width: 0, height: 0 }; var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); var arrowPaddingMin = arrowPaddingObject[mainSide]; var arrowPaddingMax = arrowPaddingObject[altSide]; var arrowLen = within(0, referenceRect[len], arrowRect[len]); var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; var tetherMax = offset2 + maxOffset - offsetModifierValue; var preventedOffset = within(tether ? min(min3, tetherMin) : min3, offset2, tether ? max(max3, tetherMax) : max3); popperOffsets2[mainAxis] = preventedOffset; data[mainAxis] = preventedOffset - offset2; } if (checkAltAxis) { var _offsetModifierState$2; var _mainSide = mainAxis === "x" ? top : left; var _altSide = mainAxis === "x" ? bottom : right; var _offset = popperOffsets2[altAxis]; var _len = altAxis === "y" ? "height" : "width"; var _min = _offset + overflow[_mainSide]; var _max = _offset - overflow[_altSide]; var isOriginSide = [top, left].indexOf(basePlacement) !== -1; var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); popperOffsets2[altAxis] = _preventedOffset; data[altAxis] = _preventedOffset - _offset; } state.modifiersData[name] = data; } var preventOverflow_default = { name: "preventOverflow", enabled: true, phase: "main", fn: preventOverflow, requiresIfExists: ["offset"] }; // node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js function getHTMLElementScroll(element) { return { scrollLeft: element.scrollLeft, scrollTop: element.scrollTop }; } // node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js function getNodeScroll(node) { if (node === getWindow(node) || !isHTMLElement(node)) { return getWindowScroll(node); } else { return getHTMLElementScroll(node); } } // node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js function isElementScaled(element) { var rect = element.getBoundingClientRect(); var scaleX = round(rect.width) / element.offsetWidth || 1; var scaleY = round(rect.height) / element.offsetHeight || 1; return scaleX !== 1 || scaleY !== 1; } function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { if (isFixed === void 0) { isFixed = false; } var isOffsetParentAnElement = isHTMLElement(offsetParent); var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); var documentElement = getDocumentElement(offsetParent); var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); var scroll = { scrollLeft: 0, scrollTop: 0 }; var offsets = { x: 0, y: 0 }; if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isHTMLElement(offsetParent)) { offsets = getBoundingClientRect(offsetParent, true); offsets.x += offsetParent.clientLeft; offsets.y += offsetParent.clientTop; } else if (documentElement) { offsets.x = getWindowScrollBarX(documentElement); } } return { x: rect.left + scroll.scrollLeft - offsets.x, y: rect.top + scroll.scrollTop - offsets.y, width: rect.width, height: rect.height }; } // node_modules/@popperjs/core/lib/utils/orderModifiers.js function order(modifiers) { var map2 = /* @__PURE__ */ new Map(); var visited = /* @__PURE__ */ new Set(); var result = []; modifiers.forEach(function(modifier) { map2.set(modifier.name, modifier); }); function sort2(modifier) { visited.add(modifier.name); var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); requires.forEach(function(dep) { if (!visited.has(dep)) { var depModifier = map2.get(dep); if (depModifier) { sort2(depModifier); } } }); result.push(modifier); } modifiers.forEach(function(modifier) { if (!visited.has(modifier.name)) { sort2(modifier); } }); return result; } function orderModifiers(modifiers) { var orderedModifiers = order(modifiers); return modifierPhases.reduce(function(acc, phase) { return acc.concat(orderedModifiers.filter(function(modifier) { return modifier.phase === phase; })); }, []); } // node_modules/@popperjs/core/lib/utils/debounce.js function debounce(fn2) { var pending; return function() { if (!pending) { pending = new Promise(function(resolve) { Promise.resolve().then(function() { pending = void 0; resolve(fn2()); }); }); } return pending; }; } // node_modules/@popperjs/core/lib/utils/format.js function format(str) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return [].concat(args).reduce(function(p, c2) { return p.replace(/%s/, c2); }, str); } // node_modules/@popperjs/core/lib/utils/validateModifiers.js var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"]; function validateModifiers(modifiers) { modifiers.forEach(function(modifier) { [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index2, self) { return self.indexOf(value) === index2; }).forEach(function(key) { switch (key) { case "name": if (typeof modifier.name !== "string") { console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"')); } break; case "enabled": if (typeof modifier.enabled !== "boolean") { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"')); } break; case "phase": if (modifierPhases.indexOf(modifier.phase) < 0) { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"')); } break; case "fn": if (typeof modifier.fn !== "function") { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"')); } break; case "effect": if (modifier.effect != null && typeof modifier.effect !== "function") { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"')); } break; case "requires": if (modifier.requires != null && !Array.isArray(modifier.requires)) { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"')); } break; case "requiresIfExists": if (!Array.isArray(modifier.requiresIfExists)) { console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"')); } break; case "options": case "data": break; default: console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) { return '"' + s + '"'; }).join(", ") + '; but "' + key + '" was provided.'); } modifier.requires && modifier.requires.forEach(function(requirement) { if (modifiers.find(function(mod) { return mod.name === requirement; }) == null) { console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); } }); }); }); } // node_modules/@popperjs/core/lib/utils/uniqueBy.js function uniqueBy(arr, fn2) { var identifiers = /* @__PURE__ */ new Set(); return arr.filter(function(item) { var identifier = fn2(item); if (!identifiers.has(identifier)) { identifiers.add(identifier); return true; } }); } // node_modules/@popperjs/core/lib/utils/mergeByName.js function mergeByName(modifiers) { var merged = modifiers.reduce(function(merged2, current) { var existing = merged2[current.name]; merged2[current.name] = existing ? Object.assign({}, existing, current, { options: Object.assign({}, existing.options, current.options), data: Object.assign({}, existing.data, current.data) }) : current; return merged2; }, {}); return Object.keys(merged).map(function(key) { return merged[key]; }); } // node_modules/@popperjs/core/lib/createPopper.js var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element."; var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash."; var DEFAULT_OPTIONS = { placement: "bottom", modifiers: [], strategy: "absolute" }; function areValidElements() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return !args.some(function(element) { return !(element && typeof element.getBoundingClientRect === "function"); }); } function popperGenerator(generatorOptions) { if (generatorOptions === void 0) { generatorOptions = {}; } var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; return function createPopper2(reference2, popper2, options) { if (options === void 0) { options = defaultOptions; } var state = { placement: "bottom", orderedModifiers: [], options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), modifiersData: {}, elements: { reference: reference2, popper: popper2 }, attributes: {}, styles: {} }; var effectCleanupFns = []; var isDestroyed = false; var instance = { state, setOptions: function setOptions(setOptionsAction) { var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; cleanupModifierEffects(); state.options = Object.assign({}, defaultOptions, state.options, options2); state.scrollParents = { reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], popper: listScrollParents(popper2) }; var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); state.orderedModifiers = orderedModifiers.filter(function(m2) { return m2.enabled; }); if (true) { var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) { var name = _ref.name; return name; }); validateModifiers(modifiers); if (getBasePlacement(state.options.placement) === auto) { var flipModifier = state.orderedModifiers.find(function(_ref2) { var name = _ref2.name; return name === "flip"; }); if (!flipModifier) { console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" ")); } } var _getComputedStyle = getComputedStyle(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft; if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) { return parseFloat(margin); })) { console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" ")); } } runModifierEffects(); return instance.update(); }, forceUpdate: function forceUpdate() { if (isDestroyed) { return; } var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; if (!areValidElements(reference3, popper3)) { if (true) { console.error(INVALID_ELEMENT_ERROR); } return; } state.rects = { reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), popper: getLayoutRect(popper3) }; state.reset = false; state.placement = state.options.placement; state.orderedModifiers.forEach(function(modifier) { return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); }); var __debug_loops__ = 0; for (var index2 = 0; index2 < state.orderedModifiers.length; index2++) { if (true) { __debug_loops__ += 1; if (__debug_loops__ > 100) { console.error(INFINITE_LOOP_ERROR); break; } } if (state.reset === true) { state.reset = false; index2 = -1; continue; } var _state$orderedModifie = state.orderedModifiers[index2], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; if (typeof fn2 === "function") { state = fn2({ state, options: _options, name, instance }) || state; } } }, update: debounce(function() { return new Promise(function(resolve) { instance.forceUpdate(); resolve(state); }); }), destroy: function destroy() { cleanupModifierEffects(); isDestroyed = true; } }; if (!areValidElements(reference2, popper2)) { if (true) { console.error(INVALID_ELEMENT_ERROR); } return instance; } instance.setOptions(options).then(function(state2) { if (!isDestroyed && options.onFirstUpdate) { options.onFirstUpdate(state2); } }); function runModifierEffects() { state.orderedModifiers.forEach(function(_ref3) { var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect4 = _ref3.effect; if (typeof effect4 === "function") { var cleanupFn = effect4({ state, name, instance, options: options2 }); var noopFn = function noopFn2() { }; effectCleanupFns.push(cleanupFn || noopFn); } }); } function cleanupModifierEffects() { effectCleanupFns.forEach(function(fn2) { return fn2(); }); effectCleanupFns = []; } return instance; }; } // node_modules/@popperjs/core/lib/popper.js var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default]; var createPopper = /* @__PURE__ */ popperGenerator({ defaultModifiers }); // src/suggest.ts var wrapAround = (value, size) => { return (value % size + size) % size; }; var Suggest = class { constructor(owner, containerEl, scope) { this.owner = owner; this.containerEl = containerEl; containerEl.on( "click", ".suggestion-item", this.onSuggestionClick.bind(this) ); containerEl.on( "mousemove", ".suggestion-item", this.onSuggestionMouseover.bind(this) ); scope.register([], "ArrowUp", (event) => { if (!event.isComposing) { this.setSelectedItem(this.selectedItem - 1, true); return false; } }); scope.register([], "ArrowDown", (event) => { if (!event.isComposing) { this.setSelectedItem(this.selectedItem + 1, true); return false; } }); scope.register([], "Enter", (event) => { if (!event.isComposing) { this.useSelectedItem(event); return false; } }); } onSuggestionClick(event, el) { event.preventDefault(); const item = this.suggestions.indexOf(el); this.setSelectedItem(item, false); this.useSelectedItem(event); } onSuggestionMouseover(_event, el) { const item = this.suggestions.indexOf(el); this.setSelectedItem(item, false); } setSuggestions(values) { this.containerEl.empty(); const suggestionEls = []; values.forEach((value) => { const suggestionEl = this.containerEl.createDiv("suggestion-item"); this.owner.renderSuggestion(value, suggestionEl); suggestionEls.push(suggestionEl); }); this.values = values; this.suggestions = suggestionEls; this.setSelectedItem(0, false); } useSelectedItem(event) { const currentValue = this.values[this.selectedItem]; if (currentValue) { this.owner.selectSuggestion(currentValue, event); } } setSelectedItem(selectedIndex, scrollIntoView) { const normalizedIndex = wrapAround(selectedIndex, this.suggestions.length); const prevSelectedSuggestion = this.suggestions[this.selectedItem]; const selectedSuggestion = this.suggestions[normalizedIndex]; prevSelectedSuggestion?.removeClass("is-selected"); selectedSuggestion?.addClass("is-selected"); this.selectedItem = normalizedIndex; if (scrollIntoView) { selectedSuggestion.scrollIntoView(false); } } }; var TextInputSuggest = class { constructor(app2, inputEl) { this.app = app2; this.inputEl = inputEl; this.scope = new import_obsidian.Scope(); this.suggestEl = createDiv("suggestion-container"); const suggestion = this.suggestEl.createDiv("suggestion"); this.suggest = new Suggest(this, suggestion, this.scope); this.scope.register([], "Escape", this.close.bind(this)); this.inputEl.addEventListener("input", this.onInputChanged.bind(this)); this.inputEl.addEventListener("focus", this.onInputChanged.bind(this)); this.inputEl.addEventListener("blur", this.close.bind(this)); this.suggestEl.on( "mousedown", ".suggestion-container", (event) => { event.preventDefault(); } ); } onInputChanged() { const inputStr = this.inputEl.value; const suggestions = this.getSuggestions(inputStr); if (!suggestions) { this.close(); return; } if (suggestions.length > 0) { this.suggest.setSuggestions(suggestions); this.open(this.app.dom.appContainerEl, this.inputEl); } else { this.close(); } } open(container, inputEl) { this.app.keymap.pushScope(this.scope); container.appendChild(this.suggestEl); this.popper = createPopper(inputEl, this.suggestEl, { placement: "bottom-start", modifiers: [ { name: "sameWidth", enabled: true, fn: ({ state, instance }) => { const targetWidth = `${state.rects.reference.width}px`; if (state.styles.popper.width === targetWidth) { return; } state.styles.popper.width = targetWidth; instance.update(); }, phase: "beforeWrite", requires: ["computeStyles"] } ] }); } close() { this.app.keymap.popScope(this.scope); this.suggest.setSuggestions([]); if (this.popper) this.popper.destroy(); this.suggestEl.detach(); } }; // src/generic_text_suggester.ts var import_obsidian2 = require("obsidian"); var SuggestFile = class { constructor(name, path, origin) { this.name = name; this.path = path; this.origin = origin; } }; var GenericTextSuggester = class extends TextInputSuggest { constructor(app2, inputEl, items) { super(app2, inputEl); this.app = app2; this.inputEl = inputEl; this.items = items; } getSuggestions(inputStr) { const inputLowerCase = inputStr.toLowerCase(); const filtered = this.items.filter((item) => { if (item.name?.toLowerCase()?.contains(inputLowerCase)) return item; if (item.path?.toLowerCase()?.contains(inputLowerCase) && item?.origin) return item; }); if (!filtered) this.close(); if (filtered?.length > 0) return filtered.sort((a2, b) => { const aFileName = a2.name.toLowerCase(), bFileName = b.name.toLowerCase(); const aFilePath = a2.path.toLowerCase(), bFilePath = b.path.toLowerCase(); const aFileNamePos = aFileName.indexOf(inputLowerCase), bFileNamePos = bFileName.indexOf(inputLowerCase); if (aFileNamePos !== -1 && bFileNamePos !== -1) { if (aFileNamePos !== bFileNamePos) return aFileNamePos - bFileNamePos; else { return aFileName.length - bFileName.length; } } else if (aFileName.indexOf(inputLowerCase) === -1) { return 1; } else if (bFileName.indexOf(inputLowerCase) === -1) { return -1; } const aFilePathPos = aFilePath.indexOf(inputLowerCase); const bFilePathPos = bFilePath.indexOf(inputLowerCase); if (aFilePathPos !== bFilePathPos) return aFilePathPos - bFilePathPos; else return aFilePath.length - bFilePath.length; }); return []; } selectSuggestion(item) { this.inputEl.value = item.path; this.inputEl.trigger("input"); this.close(); } renderSuggestion(value, el) { if (value) { let suggestContainer = el.createDiv(); suggestContainer.addClasses(["path-finder", "suggest-item"]); let title = suggestContainer.createDiv({ text: value.name }); title.addClasses(["path-finder", "suggest-item", "item-name"]); let content = suggestContainer.createDiv({ text: value.path }); content.addClasses(["path-finder", "suggest-item", "item-path"]); if (!value.origin) { let icon = suggestContainer.createDiv(); (0, import_obsidian2.setIcon)(icon, "forward-arrow"); icon.addClasses(["path-finder", "alias-icon"]); } } } }; // src/modals.ts function getFilesWithAliases() { let markdownFiles = app.vault.getMarkdownFiles(); let markdownFilesWithAlias = []; for (let file of markdownFiles) { markdownFilesWithAlias.push( new SuggestFile(file.basename, file.path, true) ); let aliases = app.metadataCache.getFileCache(file)?.frontmatter?.alias; if (aliases !== void 0) { try { for (let alias of aliases) { if (typeof alias === "string") markdownFilesWithAlias.push( new SuggestFile(alias, file.path, false) ); } } catch (error) { console.log( `Path Finder Plugin: Wrong alias format in file ${file.path}. Please consider change it.` ); } } } return markdownFilesWithAlias; } var PathsModal = class extends import_obsidian3.Modal { constructor(app2, callback, filter2, operation) { super(app2); this.length = 10; this.callback = callback; this.filter = filter2; this.operation = operation; } onOpen() { const { contentEl } = this; if (this.operation == "all_paths") { contentEl.createEl("h1", { text: "Get All Paths As Text" }); } if (this.operation == "shortest_path") { contentEl.createEl("h1", { text: "Get Shortest Path As Graph" }); } if (this.operation == "all_paths_as_graph") { contentEl.createEl("h1", { text: "Get All Paths As Graph" }); } const markdownFilesWithAlias = getFilesWithAliases(); new import_obsidian3.Setting(contentEl).setDesc("The file to start from. Use full path from vault root.").setName("From").addText((textComponent) => { new GenericTextSuggester( this.app, textComponent.inputEl, markdownFilesWithAlias ); textComponent.onChange((path) => { this.from = path; }); }); new import_obsidian3.Setting(contentEl).setDesc("The file to end with. Use full path from vault root.").setName("To").addText((textComponent) => { new GenericTextSuggester( this.app, textComponent.inputEl, markdownFilesWithAlias ); textComponent.onChange((path) => { this.to = path; }); }); if (this.operation != "shortest_path") { new import_obsidian3.Setting(contentEl).setName("Length").setDesc( "The maximum length of paths. Set 0 to show all paths regardless of length." ).addText((textComponent) => { textComponent.setPlaceholder("10").onChange((length) => { this.length = parseInt(length); }); }); } new import_obsidian3.Setting(contentEl).setName("Filter").setDesc( (0, import_obsidian3.sanitizeHTMLToDom)( `Write plain text or regex.
The filter string will be matched everywhere in the file path(from vault root to file).
Regex Tutorial` ) ).addText((text) => { text.setValue(this.filter.regexp).onChange((filter2) => { this.filter.regexp = filter2; }); }); new import_obsidian3.Setting(contentEl).setName("Filter Mode").addDropdown((dropdown) => { dropdown.addOption("Include", "Include").addOption("Exclude", "Exclude").setValue(this.filter.mode).onChange((mode) => { this.filter.mode = mode; }); }); new import_obsidian3.Setting(contentEl).addButton((button) => { button.setButtonText("Confirm").setCta().onClick(async () => { if (app.vault.getAbstractFileByPath(this.from) === null) { new import_obsidian3.Notice(`${this.from} is not a legal path.`); return; } if (app.vault.getAbstractFileByPath(this.to) === null) { new import_obsidian3.Notice(`${this.to} is not a legal path.`); return; } if (isNaN(this.length) || this.length < 0) { new import_obsidian3.Notice(`Illegal maximum path length.`); return; } if (this.length == 0) this.length = Infinity; if (this.operation == "shortest_path") { this.callback(this.filter, this.from, this.to); } else { this.callback( this.filter, this.from, this.to, this.length ); } this.close(); }); }); } onClose() { const { contentEl } = this; contentEl.empty(); } }; // src/view.ts var import_obsidian6 = require("obsidian"); // node_modules/heap-js/dist/heap-js.es5.js var __generator = function(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y2, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y2 && (t = op[0] & 2 ? y2["return"] : op[0] ? y2["throw"] || ((t = y2["return"]) && t.call(y2), 0) : y2.next) && !(t = t.call(y2, op[1])).done) return t; if (y2 = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y2 = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y2 = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __read = function(o, n) { var m2 = typeof Symbol === "function" && o[Symbol.iterator]; if (!m2) return o; var i = m2.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m2 = i["return"])) m2.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = function(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var Heap = function() { function Heap2(compare) { if (compare === void 0) { compare = Heap2.minComparator; } var _this = this; this.compare = compare; this.heapArray = []; this._limit = 0; this.offer = this.add; this.element = this.peek; this.poll = this.pop; this._invertedCompare = function(a2, b) { return -1 * _this.compare(a2, b); }; } Heap2.getChildrenIndexOf = function(idx) { return [idx * 2 + 1, idx * 2 + 2]; }; Heap2.getParentIndexOf = function(idx) { if (idx <= 0) { return -1; } var whichChildren = idx % 2 ? 1 : 2; return Math.floor((idx - whichChildren) / 2); }; Heap2.getSiblingIndexOf = function(idx) { if (idx <= 0) { return -1; } var whichChildren = idx % 2 ? 1 : -1; return idx + whichChildren; }; Heap2.minComparator = function(a2, b) { if (a2 > b) { return 1; } else if (a2 < b) { return -1; } else { return 0; } }; Heap2.maxComparator = function(a2, b) { if (b > a2) { return 1; } else if (b < a2) { return -1; } else { return 0; } }; Heap2.minComparatorNumber = function(a2, b) { return a2 - b; }; Heap2.maxComparatorNumber = function(a2, b) { return b - a2; }; Heap2.defaultIsEqual = function(a2, b) { return a2 === b; }; Heap2.print = function(heap) { function deep(i2) { var pi = Heap2.getParentIndexOf(i2); return Math.floor(Math.log2(pi + 1)); } function repeat(str, times) { var out = ""; for (; times > 0; --times) { out += str; } return out; } var node = 0; var lines = []; var maxLines = deep(heap.length - 1) + 2; var maxLength = 0; while (node < heap.length) { var i = deep(node) + 1; if (node === 0) { i = 0; } var nodeText = String(heap.get(node)); if (nodeText.length > maxLength) { maxLength = nodeText.length; } lines[i] = lines[i] || []; lines[i].push(nodeText); node += 1; } return lines.map(function(line, i2) { var times = Math.pow(2, maxLines - i2) - 1; return repeat(" ", Math.floor(times / 2) * maxLength) + line.map(function(el) { var half = (maxLength - el.length) / 2; return repeat(" ", Math.ceil(half)) + el + repeat(" ", Math.floor(half)); }).join(repeat(" ", times * maxLength)); }).join("\n"); }; Heap2.heapify = function(arr, compare) { var heap = new Heap2(compare); heap.heapArray = arr; heap.init(); return heap; }; Heap2.heappop = function(heapArr, compare) { var heap = new Heap2(compare); heap.heapArray = heapArr; return heap.pop(); }; Heap2.heappush = function(heapArr, item, compare) { var heap = new Heap2(compare); heap.heapArray = heapArr; heap.push(item); }; Heap2.heappushpop = function(heapArr, item, compare) { var heap = new Heap2(compare); heap.heapArray = heapArr; return heap.pushpop(item); }; Heap2.heapreplace = function(heapArr, item, compare) { var heap = new Heap2(compare); heap.heapArray = heapArr; return heap.replace(item); }; Heap2.heaptop = function(heapArr, n, compare) { if (n === void 0) { n = 1; } var heap = new Heap2(compare); heap.heapArray = heapArr; return heap.top(n); }; Heap2.heapbottom = function(heapArr, n, compare) { if (n === void 0) { n = 1; } var heap = new Heap2(compare); heap.heapArray = heapArr; return heap.bottom(n); }; Heap2.nlargest = function(n, iterable, compare) { var heap = new Heap2(compare); heap.heapArray = __spreadArray([], __read(iterable), false); heap.init(); return heap.top(n); }; Heap2.nsmallest = function(n, iterable, compare) { var heap = new Heap2(compare); heap.heapArray = __spreadArray([], __read(iterable), false); heap.init(); return heap.bottom(n); }; Heap2.prototype.add = function(element) { this._sortNodeUp(this.heapArray.push(element) - 1); this._applyLimit(); return true; }; Heap2.prototype.addAll = function(elements) { var _a; var i = this.length; (_a = this.heapArray).push.apply(_a, __spreadArray([], __read(elements), false)); for (var l = this.length; i < l; ++i) { this._sortNodeUp(i); } this._applyLimit(); return true; }; Heap2.prototype.bottom = function(n) { if (n === void 0) { n = 1; } if (this.heapArray.length === 0 || n <= 0) { return []; } else if (this.heapArray.length === 1) { return [this.heapArray[0]]; } else if (n >= this.heapArray.length) { return __spreadArray([], __read(this.heapArray), false); } else { var result = this._bottomN_push(~~n); return result; } }; Heap2.prototype.check = function() { var _this = this; return this.heapArray.find(function(el, j) { return !!_this.getChildrenOf(j).find(function(ch) { return _this.compare(el, ch) > 0; }); }); }; Heap2.prototype.clear = function() { this.heapArray = []; }; Heap2.prototype.clone = function() { var cloned = new Heap2(this.comparator()); cloned.heapArray = this.toArray(); cloned._limit = this._limit; return cloned; }; Heap2.prototype.comparator = function() { return this.compare; }; Heap2.prototype.contains = function(o, fn2) { if (fn2 === void 0) { fn2 = Heap2.defaultIsEqual; } return this.heapArray.findIndex(function(el) { return fn2(el, o); }) >= 0; }; Heap2.prototype.init = function(array2) { if (array2) { this.heapArray = __spreadArray([], __read(array2), false); } for (var i = Math.floor(this.heapArray.length); i >= 0; --i) { this._sortNodeDown(i); } this._applyLimit(); }; Heap2.prototype.isEmpty = function() { return this.length === 0; }; Heap2.prototype.leafs = function() { if (this.heapArray.length === 0) { return []; } var pi = Heap2.getParentIndexOf(this.heapArray.length - 1); return this.heapArray.slice(pi + 1); }; Object.defineProperty(Heap2.prototype, "length", { get: function() { return this.heapArray.length; }, enumerable: false, configurable: true }); Object.defineProperty(Heap2.prototype, "limit", { get: function() { return this._limit; }, set: function(_l) { this._limit = ~~_l; this._applyLimit(); }, enumerable: false, configurable: true }); Heap2.prototype.peek = function() { return this.heapArray[0]; }; Heap2.prototype.pop = function() { var last = this.heapArray.pop(); if (this.length > 0 && last !== void 0) { return this.replace(last); } return last; }; Heap2.prototype.push = function() { var elements = []; for (var _i = 0; _i < arguments.length; _i++) { elements[_i] = arguments[_i]; } if (elements.length < 1) { return false; } else if (elements.length === 1) { return this.add(elements[0]); } else { return this.addAll(elements); } }; Heap2.prototype.pushpop = function(element) { var _a; if (this.compare(this.heapArray[0], element) < 0) { _a = __read([this.heapArray[0], element], 2), element = _a[0], this.heapArray[0] = _a[1]; this._sortNodeDown(0); } return element; }; Heap2.prototype.remove = function(o, fn2) { if (fn2 === void 0) { fn2 = Heap2.defaultIsEqual; } if (this.length > 0) { if (o === void 0) { this.pop(); return true; } else { var idx = this.heapArray.findIndex(function(el) { return fn2(el, o); }); if (idx >= 0) { if (idx === 0) { this.pop(); } else if (idx === this.length - 1) { this.heapArray.pop(); } else { this.heapArray.splice(idx, 1, this.heapArray.pop()); this._sortNodeUp(idx); this._sortNodeDown(idx); } return true; } } } return false; }; Heap2.prototype.replace = function(element) { var peek = this.heapArray[0]; this.heapArray[0] = element; this._sortNodeDown(0); return peek; }; Heap2.prototype.size = function() { return this.length; }; Heap2.prototype.top = function(n) { if (n === void 0) { n = 1; } if (this.heapArray.length === 0 || n <= 0) { return []; } else if (this.heapArray.length === 1 || n === 1) { return [this.heapArray[0]]; } else if (n >= this.heapArray.length) { return __spreadArray([], __read(this.heapArray), false); } else { var result = this._topN_push(~~n); return result; } }; Heap2.prototype.toArray = function() { return __spreadArray([], __read(this.heapArray), false); }; Heap2.prototype.toString = function() { return this.heapArray.toString(); }; Heap2.prototype.get = function(i) { return this.heapArray[i]; }; Heap2.prototype.getChildrenOf = function(idx) { var _this = this; return Heap2.getChildrenIndexOf(idx).map(function(i) { return _this.heapArray[i]; }).filter(function(e) { return e !== void 0; }); }; Heap2.prototype.getParentOf = function(idx) { var pi = Heap2.getParentIndexOf(idx); return this.heapArray[pi]; }; Heap2.prototype[Symbol.iterator] = function() { return __generator(this, function(_a) { switch (_a.label) { case 0: if (!this.length) return [3, 2]; return [4, this.pop()]; case 1: _a.sent(); return [3, 0]; case 2: return [2]; } }); }; Heap2.prototype.iterator = function() { return this.toArray(); }; Heap2.prototype._applyLimit = function() { if (this._limit && this._limit < this.heapArray.length) { var rm = this.heapArray.length - this._limit; while (rm) { this.heapArray.pop(); --rm; } } }; Heap2.prototype._bottomN_push = function(n) { var bottomHeap = new Heap2(this.compare); bottomHeap.limit = n; bottomHeap.heapArray = this.heapArray.slice(-n); bottomHeap.init(); var startAt = this.heapArray.length - 1 - n; var parentStartAt = Heap2.getParentIndexOf(startAt); var indices = []; for (var i = startAt; i > parentStartAt; --i) { indices.push(i); } var arr = this.heapArray; while (indices.length) { var i = indices.shift(); if (this.compare(arr[i], bottomHeap.peek()) > 0) { bottomHeap.replace(arr[i]); if (i % 2) { indices.push(Heap2.getParentIndexOf(i)); } } } return bottomHeap.toArray(); }; Heap2.prototype._moveNode = function(j, k) { var _a; _a = __read([this.heapArray[k], this.heapArray[j]], 2), this.heapArray[j] = _a[0], this.heapArray[k] = _a[1]; }; Heap2.prototype._sortNodeDown = function(i) { var _this = this; var moveIt = i < this.heapArray.length - 1; var self = this.heapArray[i]; var getPotentialParent = function(best, j) { if (_this.heapArray.length > j && _this.compare(_this.heapArray[j], _this.heapArray[best]) < 0) { best = j; } return best; }; while (moveIt) { var childrenIdx = Heap2.getChildrenIndexOf(i); var bestChildIndex = childrenIdx.reduce(getPotentialParent, childrenIdx[0]); var bestChild = this.heapArray[bestChildIndex]; if (typeof bestChild !== "undefined" && this.compare(self, bestChild) > 0) { this._moveNode(i, bestChildIndex); i = bestChildIndex; } else { moveIt = false; } } }; Heap2.prototype._sortNodeUp = function(i) { var moveIt = i > 0; while (moveIt) { var pi = Heap2.getParentIndexOf(i); if (pi >= 0 && this.compare(this.heapArray[pi], this.heapArray[i]) > 0) { this._moveNode(i, pi); i = pi; } else { moveIt = false; } } }; Heap2.prototype._topN_push = function(n) { var topHeap = new Heap2(this._invertedCompare); topHeap.limit = n; var indices = [0]; var arr = this.heapArray; while (indices.length) { var i = indices.shift(); if (i < arr.length) { if (topHeap.length < n) { topHeap.push(arr[i]); indices.push.apply(indices, __spreadArray([], __read(Heap2.getChildrenIndexOf(i)), false)); } else if (this.compare(arr[i], topHeap.peek()) < 0) { topHeap.replace(arr[i]); indices.push.apply(indices, __spreadArray([], __read(Heap2.getChildrenIndexOf(i)), false)); } } } return topHeap.toArray(); }; Heap2.prototype._topN_fill = function(n) { var heapArray = this.heapArray; var topHeap = new Heap2(this._invertedCompare); topHeap.limit = n; topHeap.heapArray = heapArray.slice(0, n); topHeap.init(); var branch = Heap2.getParentIndexOf(n - 1) + 1; var indices = []; for (var i = branch; i < n; ++i) { indices.push.apply(indices, __spreadArray([], __read(Heap2.getChildrenIndexOf(i).filter(function(l) { return l < heapArray.length; })), false)); } if ((n - 1) % 2) { indices.push(n); } while (indices.length) { var i = indices.shift(); if (i < heapArray.length) { if (this.compare(heapArray[i], topHeap.peek()) < 0) { topHeap.replace(heapArray[i]); indices.push.apply(indices, __spreadArray([], __read(Heap2.getChildrenIndexOf(i)), false)); } } } return topHeap.toArray(); }; Heap2.prototype._topN_heap = function(n) { var topHeap = this.clone(); var result = []; for (var i = 0; i < n; ++i) { result.push(topHeap.pop()); } return result; }; Heap2.prototype._topIdxOf = function(list) { if (!list.length) { return -1; } var idx = 0; var top2 = list[idx]; for (var i = 1; i < list.length; ++i) { var comp = this.compare(list[i], top2); if (comp < 0) { idx = i; top2 = list[i]; } } return idx; }; Heap2.prototype._topOf = function() { var list = []; for (var _i = 0; _i < arguments.length; _i++) { list[_i] = arguments[_i]; } var heap = new Heap2(this.compare); heap.init(list); return heap.peek(); }; return Heap2; }(); // src/algorithms/graph/dijkstra.ts var Vertice = class { constructor(id2, dis) { this.id = id2; this.dis = dis; } }; function dijkstra(source, graph, forbiddenNodes, forbiddenEdges) { let dis = []; let from = []; let mk = []; let n = graph.getNodeCount(); let q = new Heap((a2, b) => a2.dis - b.dis); initialize(); while (!q.isEmpty()) { popIllegalNodes(); if (q.isEmpty()) break; let { id: u } = q.pop(); markNodeAsVisited(u); for (let { target: v, weight: w } of graph.getOutEdges(u)) { if (isForbiddenNode(v)) continue; if (isForbiddenEdge(u, v)) continue; if (!mk[v] && dis[u] + w < dis[v]) { dis[v] = dis[u] + w; from[v] = u; q.push(new Vertice(v, dis[v])); } } } return { dis, from }; function initialize() { for (let i = 0; i <= n; i++) { dis.push(Infinity); from.push(-1); mk.push(false); } from[source] = 0; dis[source] = 0; q.push(new Vertice(source, 0)); } function popIllegalNodes() { while (!q.isEmpty() && (dis[q.peek().id] != q.peek().dis || mk[q.peek().id])) { q.pop(); } } function isForbiddenNode(u) { return forbiddenNodes !== void 0 && forbiddenNodes.get(u); } function isForbiddenEdge(u, v) { return forbiddenEdges !== void 0 && (forbiddenEdges.get(`${u},${v}`) || forbiddenEdges.get(`${v},${u}`)); } function markNodeAsVisited(u) { mk[u] = true; } } // src/algorithms/graph/get_next_path.ts function buildPath(source, target, from) { let ret = []; for (let i = target; i > 0; i = from[i]) { ret.push(i); } ret = ret.reverse(); if (ret[0] !== source) return void 0; return ret; } var Path = class { constructor(id2, path) { this.id = id2; this.path = path; } }; async function* getNextPath(source, target, length, graph) { let pathMap = /* @__PURE__ */ new Map(); if (source == target) { yield [source]; return void 0; } let path = buildPath(source, target, dijkstra(source, graph).from); if (path === void 0) { return void 0; } let forbiddenEdges = /* @__PURE__ */ new Map(); pathMap.set(path.toString(), true); yield path.map((x2) => graph.getName(x2)); let q = new Heap((a2, b) => { if (a2.path.length != b.path.length) return a2.path.length - b.path.length; return a2.id - b.id; }); q.push(new Path(-1, path)); while (!q.isEmpty() && path.length <= graph.getNodeCount()) { let setPathAsForbidden = function(path3) { for (let i = 0; i < path3.length - 1; i++) { if (forbiddenEdges.get(path3[i]) === void 0) { forbiddenEdges.set(path3[i], /* @__PURE__ */ new Map()); } forbiddenEdges.get(path3[i]).set(`${path3[i]},${path3[i + 1]}`, true); forbiddenEdges.get(path3[i]).set(`${path3[i + 1]},${path3[i]}`, true); } }; let { path: path2 } = q.pop(); let forbiddenNodes = /* @__PURE__ */ new Map(); setPathAsForbidden(path2); for (let i = 0; i < path2.length - 1; i++) { let { from } = dijkstra( path2[i], graph, forbiddenNodes, forbiddenEdges.get(path2[i]) ); let deviatePath = buildPath( path2[i], target, from ); if (deviatePath !== void 0) { let res = new Path(i, path2.slice(0, i).concat(deviatePath)); q.push(res); } forbiddenNodes.set(path2[i], true); } while (!q.isEmpty() && pathMap.has(q.peek().path.toString())) q.pop(); if (q.isEmpty()) { return void 0; } path2 = q.peek().path; if (path2.length > length) { return void 0; } pathMap.set(path2.toString(), true); yield path2.map((x2) => graph.getName(x2)); } return void 0; } // node_modules/d3-array/src/ascending.js function ascending(a2, b) { return a2 == null || b == null ? NaN : a2 < b ? -1 : a2 > b ? 1 : a2 >= b ? 0 : NaN; } // node_modules/internmap/src/index.js var InternMap = class extends Map { constructor(entries, key = keyof) { super(); Object.defineProperties(this, { _intern: { value: /* @__PURE__ */ new Map() }, _key: { value: key } }); if (entries != null) for (const [key2, value] of entries) this.set(key2, value); } get(key) { return super.get(intern_get(this, key)); } has(key) { return super.has(intern_get(this, key)); } set(key, value) { return super.set(intern_set(this, key), value); } delete(key) { return super.delete(intern_delete(this, key)); } }; function intern_get({ _intern, _key }, value) { const key = _key(value); return _intern.has(key) ? _intern.get(key) : value; } function intern_set({ _intern, _key }, value) { const key = _key(value); if (_intern.has(key)) return _intern.get(key); _intern.set(key, value); return value; } function intern_delete({ _intern, _key }, value) { const key = _key(value); if (_intern.has(key)) { value = _intern.get(key); _intern.delete(key); } return value; } function keyof(value) { return value !== null && typeof value === "object" ? value.valueOf() : value; } // node_modules/d3-array/src/permute.js function permute(source, keys) { return Array.from(keys, (key) => source[key]); } // node_modules/d3-array/src/sort.js function sort(values, ...F) { if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); values = Array.from(values); let [f] = F; if (f && f.length !== 2 || F.length > 1) { const index2 = Uint32Array.from(values, (d, i) => i); if (F.length > 1) { F = F.map((f2) => values.map(f2)); index2.sort((i, j) => { for (const f2 of F) { const c2 = ascendingDefined(f2[i], f2[j]); if (c2) return c2; } }); } else { f = values.map(f); index2.sort((i, j) => ascendingDefined(f[i], f[j])); } return permute(values, index2); } return values.sort(compareDefined(f)); } function compareDefined(compare = ascending) { if (compare === ascending) return ascendingDefined; if (typeof compare !== "function") throw new TypeError("compare is not a function"); return (a2, b) => { const x2 = compare(a2, b); if (x2 || x2 === 0) return x2; return (compare(b, b) === 0) - (compare(a2, a2) === 0); }; } function ascendingDefined(a2, b) { return (a2 == null || !(a2 >= a2)) - (b == null || !(b >= b)) || (a2 < b ? -1 : a2 > b ? 1 : 0); } // node_modules/d3-array/src/map.js function map(values, mapper) { if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); if (typeof mapper !== "function") throw new TypeError("mapper is not a function"); return Array.from(values, (value, index2) => mapper(value, index2, values)); } // node_modules/d3-dispatch/src/dispatch.js var noop = { value: () => { } }; function dispatch() { for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t); _[t] = []; } return new Dispatch(_); } function Dispatch(_) { this._ = _; } function parseTypenames(typenames, types) { return typenames.trim().split(/^|\s+/).map(function(t) { var name = "", i = t.indexOf("."); if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); return { type: t, name }; }); } Dispatch.prototype = dispatch.prototype = { constructor: Dispatch, on: function(typename, callback) { var _ = this._, T = parseTypenames(typename + "", _), t, i = -1, n = T.length; if (arguments.length < 2) { while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; return; } if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); while (++i < n) { if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); } return this; }, copy: function() { var copy = {}, _ = this._; for (var t in _) copy[t] = _[t].slice(); return new Dispatch(copy); }, call: function(type2, that) { if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; if (!this._.hasOwnProperty(type2)) throw new Error("unknown type: " + type2); for (t = this._[type2], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); }, apply: function(type2, that, args) { if (!this._.hasOwnProperty(type2)) throw new Error("unknown type: " + type2); for (var t = this._[type2], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); } }; function get(type2, name) { for (var i = 0, n = type2.length, c2; i < n; ++i) { if ((c2 = type2[i]).name === name) { return c2.value; } } } function set(type2, name, callback) { for (var i = 0, n = type2.length; i < n; ++i) { if (type2[i].name === name) { type2[i] = noop, type2 = type2.slice(0, i).concat(type2.slice(i + 1)); break; } } if (callback != null) type2.push({ name, value: callback }); return type2; } var dispatch_default = dispatch; // node_modules/d3-selection/src/namespaces.js var xhtml = "http://www.w3.org/1999/xhtml"; var namespaces_default = { svg: "http://www.w3.org/2000/svg", xhtml, xlink: "http://www.w3.org/1999/xlink", xml: "http://www.w3.org/XML/1998/namespace", xmlns: "http://www.w3.org/2000/xmlns/" }; // node_modules/d3-selection/src/namespace.js function namespace_default(name) { var prefix = name += "", i = prefix.indexOf(":"); if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); return namespaces_default.hasOwnProperty(prefix) ? { space: namespaces_default[prefix], local: name } : name; } // node_modules/d3-selection/src/creator.js function creatorInherit(name) { return function() { var document2 = this.ownerDocument, uri = this.namespaceURI; return uri === xhtml && document2.documentElement.namespaceURI === xhtml ? document2.createElement(name) : document2.createElementNS(uri, name); }; } function creatorFixed(fullname) { return function() { return this.ownerDocument.createElementNS(fullname.space, fullname.local); }; } function creator_default(name) { var fullname = namespace_default(name); return (fullname.local ? creatorFixed : creatorInherit)(fullname); } // node_modules/d3-selection/src/selector.js function none() { } function selector_default(selector) { return selector == null ? none : function() { return this.querySelector(selector); }; } // node_modules/d3-selection/src/selection/select.js function select_default(select) { if (typeof select !== "function") select = selector_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { if ("__data__" in node) subnode.__data__ = node.__data__; subgroup[i] = subnode; } } } return new Selection(subgroups, this._parents); } // node_modules/d3-selection/src/array.js function array(x2) { return x2 == null ? [] : Array.isArray(x2) ? x2 : Array.from(x2); } // node_modules/d3-selection/src/selectorAll.js function empty() { return []; } function selectorAll_default(selector) { return selector == null ? empty : function() { return this.querySelectorAll(selector); }; } // node_modules/d3-selection/src/selection/selectAll.js function arrayAll(select) { return function() { return array(select.apply(this, arguments)); }; } function selectAll_default(select) { if (typeof select === "function") select = arrayAll(select); else select = selectorAll_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = [], parents = [], j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { subgroups.push(select.call(node, node.__data__, i, group)); parents.push(node); } } } return new Selection(subgroups, parents); } // node_modules/d3-selection/src/matcher.js function matcher_default(selector) { return function() { return this.matches(selector); }; } function childMatcher(selector) { return function(node) { return node.matches(selector); }; } // node_modules/d3-selection/src/selection/selectChild.js var find = Array.prototype.find; function childFind(match) { return function() { return find.call(this.children, match); }; } function childFirst() { return this.firstElementChild; } function selectChild_default(match) { return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match))); } // node_modules/d3-selection/src/selection/selectChildren.js var filter = Array.prototype.filter; function children() { return Array.from(this.children); } function childrenFilter(match) { return function() { return filter.call(this.children, match); }; } function selectChildren_default(match) { return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match))); } // node_modules/d3-selection/src/selection/filter.js function filter_default(match) { if (typeof match !== "function") match = matcher_default(match); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { if ((node = group[i]) && match.call(node, node.__data__, i, group)) { subgroup.push(node); } } } return new Selection(subgroups, this._parents); } // node_modules/d3-selection/src/selection/sparse.js function sparse_default(update) { return new Array(update.length); } // node_modules/d3-selection/src/selection/enter.js function enter_default() { return new Selection(this._enter || this._groups.map(sparse_default), this._parents); } function EnterNode(parent, datum2) { this.ownerDocument = parent.ownerDocument; this.namespaceURI = parent.namespaceURI; this._next = null; this._parent = parent; this.__data__ = datum2; } EnterNode.prototype = { constructor: EnterNode, appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, querySelector: function(selector) { return this._parent.querySelector(selector); }, querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } }; // node_modules/d3-selection/src/constant.js function constant_default(x2) { return function() { return x2; }; } // node_modules/d3-selection/src/selection/data.js function bindIndex(parent, group, enter, update, exit, data) { var i = 0, node, groupLength = group.length, dataLength = data.length; for (; i < dataLength; ++i) { if (node = group[i]) { node.__data__ = data[i]; update[i] = node; } else { enter[i] = new EnterNode(parent, data[i]); } } for (; i < groupLength; ++i) { if (node = group[i]) { exit[i] = node; } } } function bindKey(parent, group, enter, update, exit, data, key) { var i, node, nodeByKeyValue = /* @__PURE__ */ new Map(), groupLength = group.length, dataLength = data.length, keyValues = new Array(groupLength), keyValue; for (i = 0; i < groupLength; ++i) { if (node = group[i]) { keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + ""; if (nodeByKeyValue.has(keyValue)) { exit[i] = node; } else { nodeByKeyValue.set(keyValue, node); } } } for (i = 0; i < dataLength; ++i) { keyValue = key.call(parent, data[i], i, data) + ""; if (node = nodeByKeyValue.get(keyValue)) { update[i] = node; node.__data__ = data[i]; nodeByKeyValue.delete(keyValue); } else { enter[i] = new EnterNode(parent, data[i]); } } for (i = 0; i < groupLength; ++i) { if ((node = group[i]) && nodeByKeyValue.get(keyValues[i]) === node) { exit[i] = node; } } } function datum(node) { return node.__data__; } function data_default(value, key) { if (!arguments.length) return Array.from(this, datum); var bind = key ? bindKey : bindIndex, parents = this._parents, groups = this._groups; if (typeof value !== "function") value = constant_default(value); for (var m2 = groups.length, update = new Array(m2), enter = new Array(m2), exit = new Array(m2), j = 0; j < m2; ++j) { var parent = parents[j], group = groups[j], groupLength = group.length, data = arraylike(value.call(parent, parent && parent.__data__, j, parents)), dataLength = data.length, enterGroup = enter[j] = new Array(dataLength), updateGroup = update[j] = new Array(dataLength), exitGroup = exit[j] = new Array(groupLength); bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { if (previous = enterGroup[i0]) { if (i0 >= i1) i1 = i0 + 1; while (!(next = updateGroup[i1]) && ++i1 < dataLength) ; previous._next = next || null; } } } update = new Selection(update, parents); update._enter = enter; update._exit = exit; return update; } function arraylike(data) { return typeof data === "object" && "length" in data ? data : Array.from(data); } // node_modules/d3-selection/src/selection/exit.js function exit_default() { return new Selection(this._exit || this._groups.map(sparse_default), this._parents); } // node_modules/d3-selection/src/selection/join.js function join_default(onenter, onupdate, onexit) { var enter = this.enter(), update = this, exit = this.exit(); if (typeof onenter === "function") { enter = onenter(enter); if (enter) enter = enter.selection(); } else { enter = enter.append(onenter + ""); } if (onupdate != null) { update = onupdate(update); if (update) update = update.selection(); } if (onexit == null) exit.remove(); else onexit(exit); return enter && update ? enter.merge(update).order() : update; } // node_modules/d3-selection/src/selection/merge.js function merge_default(context) { var selection2 = context.selection ? context.selection() : context; for (var groups0 = this._groups, groups1 = selection2._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m2; ++j) { for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { if (node = group0[i] || group1[i]) { merge[i] = node; } } } for (; j < m0; ++j) { merges[j] = groups0[j]; } return new Selection(merges, this._parents); } // node_modules/d3-selection/src/selection/order.js function order_default() { for (var groups = this._groups, j = -1, m2 = groups.length; ++j < m2; ) { for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { if (node = group[i]) { if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); next = node; } } } return this; } // node_modules/d3-selection/src/selection/sort.js function sort_default(compare) { if (!compare) compare = ascending2; function compareNode(a2, b) { return a2 && b ? compare(a2.__data__, b.__data__) : !a2 - !b; } for (var groups = this._groups, m2 = groups.length, sortgroups = new Array(m2), j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { if (node = group[i]) { sortgroup[i] = node; } } sortgroup.sort(compareNode); } return new Selection(sortgroups, this._parents).order(); } function ascending2(a2, b) { return a2 < b ? -1 : a2 > b ? 1 : a2 >= b ? 0 : NaN; } // node_modules/d3-selection/src/selection/call.js function call_default() { var callback = arguments[0]; arguments[0] = this; callback.apply(null, arguments); return this; } // node_modules/d3-selection/src/selection/nodes.js function nodes_default() { return Array.from(this); } // node_modules/d3-selection/src/selection/node.js function node_default() { for (var groups = this._groups, j = 0, m2 = groups.length; j < m2; ++j) { for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { var node = group[i]; if (node) return node; } } return null; } // node_modules/d3-selection/src/selection/size.js function size_default() { let size = 0; for (const node of this) ++size; return size; } // node_modules/d3-selection/src/selection/empty.js function empty_default() { return !this.node(); } // node_modules/d3-selection/src/selection/each.js function each_default(callback) { for (var groups = this._groups, j = 0, m2 = groups.length; j < m2; ++j) { for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { if (node = group[i]) callback.call(node, node.__data__, i, group); } } return this; } // node_modules/d3-selection/src/selection/attr.js function attrRemove(name) { return function() { this.removeAttribute(name); }; } function attrRemoveNS(fullname) { return function() { this.removeAttributeNS(fullname.space, fullname.local); }; } function attrConstant(name, value) { return function() { this.setAttribute(name, value); }; } function attrConstantNS(fullname, value) { return function() { this.setAttributeNS(fullname.space, fullname.local, value); }; } function attrFunction(name, value) { return function() { var v = value.apply(this, arguments); if (v == null) this.removeAttribute(name); else this.setAttribute(name, v); }; } function attrFunctionNS(fullname, value) { return function() { var v = value.apply(this, arguments); if (v == null) this.removeAttributeNS(fullname.space, fullname.local); else this.setAttributeNS(fullname.space, fullname.local, v); }; } function attr_default(name, value) { var fullname = namespace_default(name); if (arguments.length < 2) { var node = this.node(); return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname); } return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value)); } // node_modules/d3-selection/src/window.js function window_default(node) { return node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView; } // node_modules/d3-selection/src/selection/style.js function styleRemove(name) { return function() { this.style.removeProperty(name); }; } function styleConstant(name, value, priority) { return function() { this.style.setProperty(name, value, priority); }; } function styleFunction(name, value, priority) { return function() { var v = value.apply(this, arguments); if (v == null) this.style.removeProperty(name); else this.style.setProperty(name, v, priority); }; } function style_default(name, value, priority) { return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name); } function styleValue(node, name) { return node.style.getPropertyValue(name) || window_default(node).getComputedStyle(node, null).getPropertyValue(name); } // node_modules/d3-selection/src/selection/property.js function propertyRemove(name) { return function() { delete this[name]; }; } function propertyConstant(name, value) { return function() { this[name] = value; }; } function propertyFunction(name, value) { return function() { var v = value.apply(this, arguments); if (v == null) delete this[name]; else this[name] = v; }; } function property_default(name, value) { return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name]; } // node_modules/d3-selection/src/selection/classed.js function classArray(string) { return string.trim().split(/^|\s+/); } function classList(node) { return node.classList || new ClassList(node); } function ClassList(node) { this._node = node; this._names = classArray(node.getAttribute("class") || ""); } ClassList.prototype = { add: function(name) { var i = this._names.indexOf(name); if (i < 0) { this._names.push(name); this._node.setAttribute("class", this._names.join(" ")); } }, remove: function(name) { var i = this._names.indexOf(name); if (i >= 0) { this._names.splice(i, 1); this._node.setAttribute("class", this._names.join(" ")); } }, contains: function(name) { return this._names.indexOf(name) >= 0; } }; function classedAdd(node, names) { var list = classList(node), i = -1, n = names.length; while (++i < n) list.add(names[i]); } function classedRemove(node, names) { var list = classList(node), i = -1, n = names.length; while (++i < n) list.remove(names[i]); } function classedTrue(names) { return function() { classedAdd(this, names); }; } function classedFalse(names) { return function() { classedRemove(this, names); }; } function classedFunction(names, value) { return function() { (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); }; } function classed_default(name, value) { var names = classArray(name + ""); if (arguments.length < 2) { var list = classList(this.node()), i = -1, n = names.length; while (++i < n) if (!list.contains(names[i])) return false; return true; } return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value)); } // node_modules/d3-selection/src/selection/text.js function textRemove() { this.textContent = ""; } function textConstant(value) { return function() { this.textContent = value; }; } function textFunction(value) { return function() { var v = value.apply(this, arguments); this.textContent = v == null ? "" : v; }; } function text_default(value) { return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent; } // node_modules/d3-selection/src/selection/html.js function htmlRemove() { this.innerHTML = ""; } function htmlConstant(value) { return function() { this.innerHTML = value; }; } function htmlFunction(value) { return function() { var v = value.apply(this, arguments); this.innerHTML = v == null ? "" : v; }; } function html_default(value) { return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML; } // node_modules/d3-selection/src/selection/raise.js function raise() { if (this.nextSibling) this.parentNode.appendChild(this); } function raise_default() { return this.each(raise); } // node_modules/d3-selection/src/selection/lower.js function lower() { if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); } function lower_default() { return this.each(lower); } // node_modules/d3-selection/src/selection/append.js function append_default(name) { var create2 = typeof name === "function" ? name : creator_default(name); return this.select(function() { return this.appendChild(create2.apply(this, arguments)); }); } // node_modules/d3-selection/src/selection/insert.js function constantNull() { return null; } function insert_default(name, before) { var create2 = typeof name === "function" ? name : creator_default(name), select = before == null ? constantNull : typeof before === "function" ? before : selector_default(before); return this.select(function() { return this.insertBefore(create2.apply(this, arguments), select.apply(this, arguments) || null); }); } // node_modules/d3-selection/src/selection/remove.js function remove() { var parent = this.parentNode; if (parent) parent.removeChild(this); } function remove_default() { return this.each(remove); } // node_modules/d3-selection/src/selection/clone.js function selection_cloneShallow() { var clone = this.cloneNode(false), parent = this.parentNode; return parent ? parent.insertBefore(clone, this.nextSibling) : clone; } function selection_cloneDeep() { var clone = this.cloneNode(true), parent = this.parentNode; return parent ? parent.insertBefore(clone, this.nextSibling) : clone; } function clone_default(deep) { return this.select(deep ? selection_cloneDeep : selection_cloneShallow); } // node_modules/d3-selection/src/selection/datum.js function datum_default(value) { return arguments.length ? this.property("__data__", value) : this.node().__data__; } // node_modules/d3-selection/src/selection/on.js function contextListener(listener) { return function(event) { listener.call(this, event, this.__data__); }; } function parseTypenames2(typenames) { return typenames.trim().split(/^|\s+/).map(function(t) { var name = "", i = t.indexOf("."); if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); return { type: t, name }; }); } function onRemove(typename) { return function() { var on = this.__on; if (!on) return; for (var j = 0, i = -1, m2 = on.length, o; j < m2; ++j) { if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { this.removeEventListener(o.type, o.listener, o.options); } else { on[++i] = o; } } if (++i) on.length = i; else delete this.__on; }; } function onAdd(typename, value, options) { return function() { var on = this.__on, o, listener = contextListener(value); if (on) for (var j = 0, m2 = on.length; j < m2; ++j) { if ((o = on[j]).type === typename.type && o.name === typename.name) { this.removeEventListener(o.type, o.listener, o.options); this.addEventListener(o.type, o.listener = listener, o.options = options); o.value = value; return; } } this.addEventListener(typename.type, listener, options); o = { type: typename.type, name: typename.name, value, listener, options }; if (!on) this.__on = [o]; else on.push(o); }; } function on_default(typename, value, options) { var typenames = parseTypenames2(typename + ""), i, n = typenames.length, t; if (arguments.length < 2) { var on = this.node().__on; if (on) for (var j = 0, m2 = on.length, o; j < m2; ++j) { for (i = 0, o = on[j]; i < n; ++i) { if ((t = typenames[i]).type === o.type && t.name === o.name) { return o.value; } } } return; } on = value ? onAdd : onRemove; for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options)); return this; } // node_modules/d3-selection/src/selection/dispatch.js function dispatchEvent(node, type2, params) { var window2 = window_default(node), event = window2.CustomEvent; if (typeof event === "function") { event = new event(type2, params); } else { event = window2.document.createEvent("Event"); if (params) event.initEvent(type2, params.bubbles, params.cancelable), event.detail = params.detail; else event.initEvent(type2, false, false); } node.dispatchEvent(event); } function dispatchConstant(type2, params) { return function() { return dispatchEvent(this, type2, params); }; } function dispatchFunction(type2, params) { return function() { return dispatchEvent(this, type2, params.apply(this, arguments)); }; } function dispatch_default2(type2, params) { return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type2, params)); } // node_modules/d3-selection/src/selection/iterator.js function* iterator_default() { for (var groups = this._groups, j = 0, m2 = groups.length; j < m2; ++j) { for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { if (node = group[i]) yield node; } } } // node_modules/d3-selection/src/selection/index.js var root = [null]; function Selection(groups, parents) { this._groups = groups; this._parents = parents; } function selection() { return new Selection([[document.documentElement]], root); } function selection_selection() { return this; } Selection.prototype = selection.prototype = { constructor: Selection, select: select_default, selectAll: selectAll_default, selectChild: selectChild_default, selectChildren: selectChildren_default, filter: filter_default, data: data_default, enter: enter_default, exit: exit_default, join: join_default, merge: merge_default, selection: selection_selection, order: order_default, sort: sort_default, call: call_default, nodes: nodes_default, node: node_default, size: size_default, empty: empty_default, each: each_default, attr: attr_default, style: style_default, property: property_default, classed: classed_default, text: text_default, html: html_default, raise: raise_default, lower: lower_default, append: append_default, insert: insert_default, remove: remove_default, clone: clone_default, datum: datum_default, on: on_default, dispatch: dispatch_default2, [Symbol.iterator]: iterator_default }; var selection_default = selection; // node_modules/d3-selection/src/select.js function select_default2(selector) { return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root); } // node_modules/d3-selection/src/create.js function create_default(name) { return select_default2(creator_default(name).call(document.documentElement)); } // node_modules/d3-selection/src/sourceEvent.js function sourceEvent_default(event) { let sourceEvent; while (sourceEvent = event.sourceEvent) event = sourceEvent; return event; } // node_modules/d3-selection/src/pointer.js function pointer_default(event, node) { event = sourceEvent_default(event); if (node === void 0) node = event.currentTarget; if (node) { var svg = node.ownerSVGElement || node; if (svg.createSVGPoint) { var point = svg.createSVGPoint(); point.x = event.clientX, point.y = event.clientY; point = point.matrixTransform(node.getScreenCTM().inverse()); return [point.x, point.y]; } if (node.getBoundingClientRect) { var rect = node.getBoundingClientRect(); return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; } } return [event.pageX, event.pageY]; } // node_modules/d3-drag/src/noevent.js var nonpassive = { passive: false }; var nonpassivecapture = { capture: true, passive: false }; function nopropagation(event) { event.stopImmediatePropagation(); } function noevent_default(event) { event.preventDefault(); event.stopImmediatePropagation(); } // node_modules/d3-drag/src/nodrag.js function nodrag_default(view) { var root2 = view.document.documentElement, selection2 = select_default2(view).on("dragstart.drag", noevent_default, nonpassivecapture); if ("onselectstart" in root2) { selection2.on("selectstart.drag", noevent_default, nonpassivecapture); } else { root2.__noselect = root2.style.MozUserSelect; root2.style.MozUserSelect = "none"; } } function yesdrag(view, noclick) { var root2 = view.document.documentElement, selection2 = select_default2(view).on("dragstart.drag", null); if (noclick) { selection2.on("click.drag", noevent_default, nonpassivecapture); setTimeout(function() { selection2.on("click.drag", null); }, 0); } if ("onselectstart" in root2) { selection2.on("selectstart.drag", null); } else { root2.style.MozUserSelect = root2.__noselect; delete root2.__noselect; } } // node_modules/d3-drag/src/constant.js var constant_default2 = (x2) => () => x2; // node_modules/d3-drag/src/event.js function DragEvent(type2, { sourceEvent, subject, target, identifier, active, x: x2, y: y2, dx, dy, dispatch: dispatch2 }) { Object.defineProperties(this, { type: { value: type2, enumerable: true, configurable: true }, sourceEvent: { value: sourceEvent, enumerable: true, configurable: true }, subject: { value: subject, enumerable: true, configurable: true }, target: { value: target, enumerable: true, configurable: true }, identifier: { value: identifier, enumerable: true, configurable: true }, active: { value: active, enumerable: true, configurable: true }, x: { value: x2, enumerable: true, configurable: true }, y: { value: y2, enumerable: true, configurable: true }, dx: { value: dx, enumerable: true, configurable: true }, dy: { value: dy, enumerable: true, configurable: true }, _: { value: dispatch2 } }); } DragEvent.prototype.on = function() { var value = this._.on.apply(this._, arguments); return value === this._ ? this : value; }; // node_modules/d3-drag/src/drag.js function defaultFilter(event) { return !event.ctrlKey && !event.button; } function defaultContainer() { return this.parentNode; } function defaultSubject(event, d) { return d == null ? { x: event.x, y: event.y } : d; } function defaultTouchable() { return navigator.maxTouchPoints || "ontouchstart" in this; } function drag_default() { var filter2 = defaultFilter, container = defaultContainer, subject = defaultSubject, touchable = defaultTouchable, gestures = {}, listeners = dispatch_default("start", "drag", "end"), active = 0, mousedownx, mousedowny, mousemoving, touchending, clickDistance2 = 0; function drag(selection2) { selection2.on("mousedown.drag", mousedowned).filter(touchable).on("touchstart.drag", touchstarted).on("touchmove.drag", touchmoved, nonpassive).on("touchend.drag touchcancel.drag", touchended).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); } function mousedowned(event, d) { if (touchending || !filter2.call(this, event, d)) return; var gesture = beforestart(this, container.call(this, event, d), event, d, "mouse"); if (!gesture) return; select_default2(event.view).on("mousemove.drag", mousemoved, nonpassivecapture).on("mouseup.drag", mouseupped, nonpassivecapture); nodrag_default(event.view); nopropagation(event); mousemoving = false; mousedownx = event.clientX; mousedowny = event.clientY; gesture("start", event); } function mousemoved(event) { noevent_default(event); if (!mousemoving) { var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny; mousemoving = dx * dx + dy * dy > clickDistance2; } gestures.mouse("drag", event); } function mouseupped(event) { select_default2(event.view).on("mousemove.drag mouseup.drag", null); yesdrag(event.view, mousemoving); noevent_default(event); gestures.mouse("end", event); } function touchstarted(event, d) { if (!filter2.call(this, event, d)) return; var touches = event.changedTouches, c2 = container.call(this, event, d), n = touches.length, i, gesture; for (i = 0; i < n; ++i) { if (gesture = beforestart(this, c2, event, d, touches[i].identifier, touches[i])) { nopropagation(event); gesture("start", event, touches[i]); } } } function touchmoved(event) { var touches = event.changedTouches, n = touches.length, i, gesture; for (i = 0; i < n; ++i) { if (gesture = gestures[touches[i].identifier]) { noevent_default(event); gesture("drag", event, touches[i]); } } } function touchended(event) { var touches = event.changedTouches, n = touches.length, i, gesture; if (touchending) clearTimeout(touchending); touchending = setTimeout(function() { touchending = null; }, 500); for (i = 0; i < n; ++i) { if (gesture = gestures[touches[i].identifier]) { nopropagation(event); gesture("end", event, touches[i]); } } } function beforestart(that, container2, event, d, identifier, touch) { var dispatch2 = listeners.copy(), p = pointer_default(touch || event, container2), dx, dy, s; if ((s = subject.call(that, new DragEvent("beforestart", { sourceEvent: event, target: drag, identifier, active, x: p[0], y: p[1], dx: 0, dy: 0, dispatch: dispatch2 }), d)) == null) return; dx = s.x - p[0] || 0; dy = s.y - p[1] || 0; return function gesture(type2, event2, touch2) { var p0 = p, n; switch (type2) { case "start": gestures[identifier] = gesture, n = active++; break; case "end": delete gestures[identifier], --active; case "drag": p = pointer_default(touch2 || event2, container2), n = active; break; } dispatch2.call( type2, that, new DragEvent(type2, { sourceEvent: event2, subject: s, target: drag, identifier, active: n, x: p[0] + dx, y: p[1] + dy, dx: p[0] - p0[0], dy: p[1] - p0[1], dispatch: dispatch2 }), d ); }; } drag.filter = function(_) { return arguments.length ? (filter2 = typeof _ === "function" ? _ : constant_default2(!!_), drag) : filter2; }; drag.container = function(_) { return arguments.length ? (container = typeof _ === "function" ? _ : constant_default2(_), drag) : container; }; drag.subject = function(_) { return arguments.length ? (subject = typeof _ === "function" ? _ : constant_default2(_), drag) : subject; }; drag.touchable = function(_) { return arguments.length ? (touchable = typeof _ === "function" ? _ : constant_default2(!!_), drag) : touchable; }; drag.on = function() { var value = listeners.on.apply(listeners, arguments); return value === listeners ? drag : value; }; drag.clickDistance = function(_) { return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); }; return drag; } // node_modules/d3-color/src/define.js function define_default(constructor, factory, prototype) { constructor.prototype = factory.prototype = prototype; prototype.constructor = constructor; } function extend(parent, definition) { var prototype = Object.create(parent.prototype); for (var key in definition) prototype[key] = definition[key]; return prototype; } // node_modules/d3-color/src/color.js function Color() { } var darker = 0.7; var brighter = 1 / darker; var reI = "\\s*([+-]?\\d+)\\s*"; var reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*"; var reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*"; var reHex = /^#([0-9a-f]{3,8})$/; var reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`); var reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`); var reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`); var reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`); var reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`); var reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`); var named = { aliceblue: 15792383, antiquewhite: 16444375, aqua: 65535, aquamarine: 8388564, azure: 15794175, beige: 16119260, bisque: 16770244, black: 0, blanchedalmond: 16772045, blue: 255, blueviolet: 9055202, brown: 10824234, burlywood: 14596231, cadetblue: 6266528, chartreuse: 8388352, chocolate: 13789470, coral: 16744272, cornflowerblue: 6591981, cornsilk: 16775388, crimson: 14423100, cyan: 65535, darkblue: 139, darkcyan: 35723, darkgoldenrod: 12092939, darkgray: 11119017, darkgreen: 25600, darkgrey: 11119017, darkkhaki: 12433259, darkmagenta: 9109643, darkolivegreen: 5597999, darkorange: 16747520, darkorchid: 10040012, darkred: 9109504, darksalmon: 15308410, darkseagreen: 9419919, darkslateblue: 4734347, darkslategray: 3100495, darkslategrey: 3100495, darkturquoise: 52945, darkviolet: 9699539, deeppink: 16716947, deepskyblue: 49151, dimgray: 6908265, dimgrey: 6908265, dodgerblue: 2003199, firebrick: 11674146, floralwhite: 16775920, forestgreen: 2263842, fuchsia: 16711935, gainsboro: 14474460, ghostwhite: 16316671, gold: 16766720, goldenrod: 14329120, gray: 8421504, green: 32768, greenyellow: 11403055, grey: 8421504, honeydew: 15794160, hotpink: 16738740, indianred: 13458524, indigo: 4915330, ivory: 16777200, khaki: 15787660, lavender: 15132410, lavenderblush: 16773365, lawngreen: 8190976, lemonchiffon: 16775885, lightblue: 11393254, lightcoral: 15761536, lightcyan: 14745599, lightgoldenrodyellow: 16448210, lightgray: 13882323, lightgreen: 9498256, lightgrey: 13882323, lightpink: 16758465, lightsalmon: 16752762, lightseagreen: 2142890, lightskyblue: 8900346, lightslategray: 7833753, lightslategrey: 7833753, lightsteelblue: 11584734, lightyellow: 16777184, lime: 65280, limegreen: 3329330, linen: 16445670, magenta: 16711935, maroon: 8388608, mediumaquamarine: 6737322, mediumblue: 205, mediumorchid: 12211667, mediumpurple: 9662683, mediumseagreen: 3978097, mediumslateblue: 8087790, mediumspringgreen: 64154, mediumturquoise: 4772300, mediumvioletred: 13047173, midnightblue: 1644912, mintcream: 16121850, mistyrose: 16770273, moccasin: 16770229, navajowhite: 16768685, navy: 128, oldlace: 16643558, olive: 8421376, olivedrab: 7048739, orange: 16753920, orangered: 16729344, orchid: 14315734, palegoldenrod: 15657130, palegreen: 10025880, paleturquoise: 11529966, palevioletred: 14381203, papayawhip: 16773077, peachpuff: 16767673, peru: 13468991, pink: 16761035, plum: 14524637, powderblue: 11591910, purple: 8388736, rebeccapurple: 6697881, red: 16711680, rosybrown: 12357519, royalblue: 4286945, saddlebrown: 9127187, salmon: 16416882, sandybrown: 16032864, seagreen: 3050327, seashell: 16774638, sienna: 10506797, silver: 12632256, skyblue: 8900331, slateblue: 6970061, slategray: 7372944, slategrey: 7372944, snow: 16775930, springgreen: 65407, steelblue: 4620980, tan: 13808780, teal: 32896, thistle: 14204888, tomato: 16737095, turquoise: 4251856, violet: 15631086, wheat: 16113331, white: 16777215, whitesmoke: 16119285, yellow: 16776960, yellowgreen: 10145074 }; define_default(Color, color, { copy(channels) { return Object.assign(new this.constructor(), this, channels); }, displayable() { return this.rgb().displayable(); }, hex: color_formatHex, formatHex: color_formatHex, formatHex8: color_formatHex8, formatHsl: color_formatHsl, formatRgb: color_formatRgb, toString: color_formatRgb }); function color_formatHex() { return this.rgb().formatHex(); } function color_formatHex8() { return this.rgb().formatHex8(); } function color_formatHsl() { return hslConvert(this).formatHsl(); } function color_formatRgb() { return this.rgb().formatRgb(); } function color(format2) { var m2, l; format2 = (format2 + "").trim().toLowerCase(); return (m2 = reHex.exec(format2)) ? (l = m2[1].length, m2 = parseInt(m2[1], 16), l === 6 ? rgbn(m2) : l === 3 ? new Rgb(m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, (m2 & 15) << 4 | m2 & 15, 1) : l === 8 ? rgba(m2 >> 24 & 255, m2 >> 16 & 255, m2 >> 8 & 255, (m2 & 255) / 255) : l === 4 ? rgba(m2 >> 12 & 15 | m2 >> 8 & 240, m2 >> 8 & 15 | m2 >> 4 & 240, m2 >> 4 & 15 | m2 & 240, ((m2 & 15) << 4 | m2 & 15) / 255) : null) : (m2 = reRgbInteger.exec(format2)) ? new Rgb(m2[1], m2[2], m2[3], 1) : (m2 = reRgbPercent.exec(format2)) ? new Rgb(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, 1) : (m2 = reRgbaInteger.exec(format2)) ? rgba(m2[1], m2[2], m2[3], m2[4]) : (m2 = reRgbaPercent.exec(format2)) ? rgba(m2[1] * 255 / 100, m2[2] * 255 / 100, m2[3] * 255 / 100, m2[4]) : (m2 = reHslPercent.exec(format2)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, 1) : (m2 = reHslaPercent.exec(format2)) ? hsla(m2[1], m2[2] / 100, m2[3] / 100, m2[4]) : named.hasOwnProperty(format2) ? rgbn(named[format2]) : format2 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null; } function rgbn(n) { return new Rgb(n >> 16 & 255, n >> 8 & 255, n & 255, 1); } function rgba(r, g, b, a2) { if (a2 <= 0) r = g = b = NaN; return new Rgb(r, g, b, a2); } function rgbConvert(o) { if (!(o instanceof Color)) o = color(o); if (!o) return new Rgb(); o = o.rgb(); return new Rgb(o.r, o.g, o.b, o.opacity); } function rgb(r, g, b, opacity) { return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); } function Rgb(r, g, b, opacity) { this.r = +r; this.g = +g; this.b = +b; this.opacity = +opacity; } define_default(Rgb, rgb, extend(Color, { brighter(k) { k = k == null ? brighter : Math.pow(brighter, k); return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); }, darker(k) { k = k == null ? darker : Math.pow(darker, k); return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); }, rgb() { return this; }, clamp() { return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity)); }, displayable() { return -0.5 <= this.r && this.r < 255.5 && (-0.5 <= this.g && this.g < 255.5) && (-0.5 <= this.b && this.b < 255.5) && (0 <= this.opacity && this.opacity <= 1); }, hex: rgb_formatHex, formatHex: rgb_formatHex, formatHex8: rgb_formatHex8, formatRgb: rgb_formatRgb, toString: rgb_formatRgb })); function rgb_formatHex() { return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`; } function rgb_formatHex8() { return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`; } function rgb_formatRgb() { const a2 = clampa(this.opacity); return `${a2 === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a2 === 1 ? ")" : `, ${a2})`}`; } function clampa(opacity) { return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity)); } function clampi(value) { return Math.max(0, Math.min(255, Math.round(value) || 0)); } function hex(value) { value = clampi(value); return (value < 16 ? "0" : "") + value.toString(16); } function hsla(h, s, l, a2) { if (a2 <= 0) h = s = l = NaN; else if (l <= 0 || l >= 1) h = s = NaN; else if (s <= 0) h = NaN; return new Hsl(h, s, l, a2); } function hslConvert(o) { if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); if (!(o instanceof Color)) o = color(o); if (!o) return new Hsl(); if (o instanceof Hsl) return o; o = o.rgb(); var r = o.r / 255, g = o.g / 255, b = o.b / 255, min3 = Math.min(r, g, b), max3 = Math.max(r, g, b), h = NaN, s = max3 - min3, l = (max3 + min3) / 2; if (s) { if (r === max3) h = (g - b) / s + (g < b) * 6; else if (g === max3) h = (b - r) / s + 2; else h = (r - g) / s + 4; s /= l < 0.5 ? max3 + min3 : 2 - max3 - min3; h *= 60; } else { s = l > 0 && l < 1 ? 0 : h; } return new Hsl(h, s, l, o.opacity); } function hsl(h, s, l, opacity) { return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); } function Hsl(h, s, l, opacity) { this.h = +h; this.s = +s; this.l = +l; this.opacity = +opacity; } define_default(Hsl, hsl, extend(Color, { brighter(k) { k = k == null ? brighter : Math.pow(brighter, k); return new Hsl(this.h, this.s, this.l * k, this.opacity); }, darker(k) { k = k == null ? darker : Math.pow(darker, k); return new Hsl(this.h, this.s, this.l * k, this.opacity); }, rgb() { var h = this.h % 360 + (this.h < 0) * 360, s = isNaN(h) || isNaN(this.s) ? 0 : this.s, l = this.l, m2 = l + (l < 0.5 ? l : 1 - l) * s, m1 = 2 * l - m2; return new Rgb( hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity ); }, clamp() { return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity)); }, displayable() { return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && (0 <= this.l && this.l <= 1) && (0 <= this.opacity && this.opacity <= 1); }, formatHsl() { const a2 = clampa(this.opacity); return `${a2 === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a2 === 1 ? ")" : `, ${a2})`}`; } })); function clamph(value) { value = (value || 0) % 360; return value < 0 ? value + 360 : value; } function clampt(value) { return Math.max(0, Math.min(1, value || 0)); } function hsl2rgb(h, m1, m2) { return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255; } // node_modules/d3-interpolate/src/basis.js function basis(t1, v0, v1, v2, v3) { var t2 = t1 * t1, t3 = t2 * t1; return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6; } function basis_default(values) { var n = values.length - 1; return function(t) { var i = t <= 0 ? t = 0 : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), v1 = values[i], v2 = values[i + 1], v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; return basis((t - i / n) * n, v0, v1, v2, v3); }; } // node_modules/d3-interpolate/src/basisClosed.js function basisClosed_default(values) { var n = values.length; return function(t) { var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), v0 = values[(i + n - 1) % n], v1 = values[i % n], v2 = values[(i + 1) % n], v3 = values[(i + 2) % n]; return basis((t - i / n) * n, v0, v1, v2, v3); }; } // node_modules/d3-interpolate/src/constant.js var constant_default3 = (x2) => () => x2; // node_modules/d3-interpolate/src/color.js function linear(a2, d) { return function(t) { return a2 + t * d; }; } function exponential(a2, b, y2) { return a2 = Math.pow(a2, y2), b = Math.pow(b, y2) - a2, y2 = 1 / y2, function(t) { return Math.pow(a2 + t * b, y2); }; } function gamma(y2) { return (y2 = +y2) === 1 ? nogamma : function(a2, b) { return b - a2 ? exponential(a2, b, y2) : constant_default3(isNaN(a2) ? b : a2); }; } function nogamma(a2, b) { var d = b - a2; return d ? linear(a2, d) : constant_default3(isNaN(a2) ? b : a2); } // node_modules/d3-interpolate/src/rgb.js var rgb_default = function rgbGamma(y2) { var color2 = gamma(y2); function rgb2(start3, end2) { var r = color2((start3 = rgb(start3)).r, (end2 = rgb(end2)).r), g = color2(start3.g, end2.g), b = color2(start3.b, end2.b), opacity = nogamma(start3.opacity, end2.opacity); return function(t) { start3.r = r(t); start3.g = g(t); start3.b = b(t); start3.opacity = opacity(t); return start3 + ""; }; } rgb2.gamma = rgbGamma; return rgb2; }(1); function rgbSpline(spline) { return function(colors) { var n = colors.length, r = new Array(n), g = new Array(n), b = new Array(n), i, color2; for (i = 0; i < n; ++i) { color2 = rgb(colors[i]); r[i] = color2.r || 0; g[i] = color2.g || 0; b[i] = color2.b || 0; } r = spline(r); g = spline(g); b = spline(b); color2.opacity = 1; return function(t) { color2.r = r(t); color2.g = g(t); color2.b = b(t); return color2 + ""; }; }; } var rgbBasis = rgbSpline(basis_default); var rgbBasisClosed = rgbSpline(basisClosed_default); // node_modules/d3-interpolate/src/number.js function number_default(a2, b) { return a2 = +a2, b = +b, function(t) { return a2 * (1 - t) + b * t; }; } // node_modules/d3-interpolate/src/string.js var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; var reB = new RegExp(reA.source, "g"); function zero(b) { return function() { return b; }; } function one(b) { return function(t) { return b(t) + ""; }; } function string_default(a2, b) { var bi = reA.lastIndex = reB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; a2 = a2 + "", b = b + ""; while ((am = reA.exec(a2)) && (bm = reB.exec(b))) { if ((bs = bm.index) > bi) { bs = b.slice(bi, bs); if (s[i]) s[i] += bs; else s[++i] = bs; } if ((am = am[0]) === (bm = bm[0])) { if (s[i]) s[i] += bm; else s[++i] = bm; } else { s[++i] = null; q.push({ i, x: number_default(am, bm) }); } bi = reB.lastIndex; } if (bi < b.length) { bs = b.slice(bi); if (s[i]) s[i] += bs; else s[++i] = bs; } return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function(t) { for (var i2 = 0, o; i2 < b; ++i2) s[(o = q[i2]).i] = o.x(t); return s.join(""); }); } // node_modules/d3-interpolate/src/transform/decompose.js var degrees = 180 / Math.PI; var identity = { translateX: 0, translateY: 0, rotate: 0, skewX: 0, scaleX: 1, scaleY: 1 }; function decompose_default(a2, b, c2, d, e, f) { var scaleX, scaleY, skewX; if (scaleX = Math.sqrt(a2 * a2 + b * b)) a2 /= scaleX, b /= scaleX; if (skewX = a2 * c2 + b * d) c2 -= a2 * skewX, d -= b * skewX; if (scaleY = Math.sqrt(c2 * c2 + d * d)) c2 /= scaleY, d /= scaleY, skewX /= scaleY; if (a2 * d < b * c2) a2 = -a2, b = -b, skewX = -skewX, scaleX = -scaleX; return { translateX: e, translateY: f, rotate: Math.atan2(b, a2) * degrees, skewX: Math.atan(skewX) * degrees, scaleX, scaleY }; } // node_modules/d3-interpolate/src/transform/parse.js var svgNode; function parseCss(value) { const m2 = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + ""); return m2.isIdentity ? identity : decompose_default(m2.a, m2.b, m2.c, m2.d, m2.e, m2.f); } function parseSvg(value) { if (value == null) return identity; if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); svgNode.setAttribute("transform", value); if (!(value = svgNode.transform.baseVal.consolidate())) return identity; value = value.matrix; return decompose_default(value.a, value.b, value.c, value.d, value.e, value.f); } // node_modules/d3-interpolate/src/transform/index.js function interpolateTransform(parse, pxComma, pxParen, degParen) { function pop(s) { return s.length ? s.pop() + " " : ""; } function translate(xa, ya, xb, yb, s, q) { if (xa !== xb || ya !== yb) { var i = s.push("translate(", null, pxComma, null, pxParen); q.push({ i: i - 4, x: number_default(xa, xb) }, { i: i - 2, x: number_default(ya, yb) }); } else if (xb || yb) { s.push("translate(" + xb + pxComma + yb + pxParen); } } function rotate(a2, b, s, q) { if (a2 !== b) { if (a2 - b > 180) b += 360; else if (b - a2 > 180) a2 += 360; q.push({ i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: number_default(a2, b) }); } else if (b) { s.push(pop(s) + "rotate(" + b + degParen); } } function skewX(a2, b, s, q) { if (a2 !== b) { q.push({ i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: number_default(a2, b) }); } else if (b) { s.push(pop(s) + "skewX(" + b + degParen); } } function scale(xa, ya, xb, yb, s, q) { if (xa !== xb || ya !== yb) { var i = s.push(pop(s) + "scale(", null, ",", null, ")"); q.push({ i: i - 4, x: number_default(xa, xb) }, { i: i - 2, x: number_default(ya, yb) }); } else if (xb !== 1 || yb !== 1) { s.push(pop(s) + "scale(" + xb + "," + yb + ")"); } } return function(a2, b) { var s = [], q = []; a2 = parse(a2), b = parse(b); translate(a2.translateX, a2.translateY, b.translateX, b.translateY, s, q); rotate(a2.rotate, b.rotate, s, q); skewX(a2.skewX, b.skewX, s, q); scale(a2.scaleX, a2.scaleY, b.scaleX, b.scaleY, s, q); a2 = b = null; return function(t) { var i = -1, n = q.length, o; while (++i < n) s[(o = q[i]).i] = o.x(t); return s.join(""); }; }; } var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); // node_modules/d3-interpolate/src/zoom.js var epsilon2 = 1e-12; function cosh(x2) { return ((x2 = Math.exp(x2)) + 1 / x2) / 2; } function sinh(x2) { return ((x2 = Math.exp(x2)) - 1 / x2) / 2; } function tanh(x2) { return ((x2 = Math.exp(2 * x2)) - 1) / (x2 + 1); } var zoom_default = function zoomRho(rho, rho2, rho4) { function zoom(p0, p1) { var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S; if (d2 < epsilon2) { S = Math.log(w1 / w0) / rho; i = function(t) { return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S) ]; }; } else { var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); S = (r1 - r0) / rho; i = function(t) { var s = t * S, coshr0 = cosh(r0), u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0) ]; }; } i.duration = S * 1e3 * rho / Math.SQRT2; return i; } zoom.rho = function(_) { var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2; return zoomRho(_1, _2, _4); }; return zoom; }(Math.SQRT2, 2, 4); // node_modules/d3-timer/src/timer.js var frame = 0; var timeout = 0; var interval = 0; var pokeDelay = 1e3; var taskHead; var taskTail; var clockLast = 0; var clockNow = 0; var clockSkew = 0; var clock = typeof performance === "object" && performance.now ? performance : Date; var setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; function now() { return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); } function clearNow() { clockNow = 0; } function Timer() { this._call = this._time = this._next = null; } Timer.prototype = timer.prototype = { constructor: Timer, restart: function(callback, delay, time) { if (typeof callback !== "function") throw new TypeError("callback is not a function"); time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); if (!this._next && taskTail !== this) { if (taskTail) taskTail._next = this; else taskHead = this; taskTail = this; } this._call = callback; this._time = time; sleep(); }, stop: function() { if (this._call) { this._call = null; this._time = Infinity; sleep(); } } }; function timer(callback, delay, time) { var t = new Timer(); t.restart(callback, delay, time); return t; } function timerFlush() { now(); ++frame; var t = taskHead, e; while (t) { if ((e = clockNow - t._time) >= 0) t._call.call(void 0, e); t = t._next; } --frame; } function wake() { clockNow = (clockLast = clock.now()) + clockSkew; frame = timeout = 0; try { timerFlush(); } finally { frame = 0; nap(); clockNow = 0; } } function poke() { var now2 = clock.now(), delay = now2 - clockLast; if (delay > pokeDelay) clockSkew -= delay, clockLast = now2; } function nap() { var t0, t1 = taskHead, t2, time = Infinity; while (t1) { if (t1._call) { if (time > t1._time) time = t1._time; t0 = t1, t1 = t1._next; } else { t2 = t1._next, t1._next = null; t1 = t0 ? t0._next = t2 : taskHead = t2; } } taskTail = t0; sleep(time); } function sleep(time) { if (frame) return; if (timeout) timeout = clearTimeout(timeout); var delay = time - clockNow; if (delay > 24) { if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); if (interval) interval = clearInterval(interval); } else { if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); frame = 1, setFrame(wake); } } // node_modules/d3-timer/src/timeout.js function timeout_default(callback, delay, time) { var t = new Timer(); delay = delay == null ? 0 : +delay; t.restart((elapsed) => { t.stop(); callback(elapsed + delay); }, delay, time); return t; } // node_modules/d3-transition/src/transition/schedule.js var emptyOn = dispatch_default("start", "end", "cancel", "interrupt"); var emptyTween = []; var CREATED = 0; var SCHEDULED = 1; var STARTING = 2; var STARTED = 3; var RUNNING = 4; var ENDING = 5; var ENDED = 6; function schedule_default(node, name, id2, index2, group, timing) { var schedules = node.__transition; if (!schedules) node.__transition = {}; else if (id2 in schedules) return; create(node, id2, { name, index: index2, group, on: emptyOn, tween: emptyTween, time: timing.time, delay: timing.delay, duration: timing.duration, ease: timing.ease, timer: null, state: CREATED }); } function init(node, id2) { var schedule = get2(node, id2); if (schedule.state > CREATED) throw new Error("too late; already scheduled"); return schedule; } function set2(node, id2) { var schedule = get2(node, id2); if (schedule.state > STARTED) throw new Error("too late; already running"); return schedule; } function get2(node, id2) { var schedule = node.__transition; if (!schedule || !(schedule = schedule[id2])) throw new Error("transition not found"); return schedule; } function create(node, id2, self) { var schedules = node.__transition, tween; schedules[id2] = self; self.timer = timer(schedule, 0, self.time); function schedule(elapsed) { self.state = SCHEDULED; self.timer.restart(start3, self.delay, self.time); if (self.delay <= elapsed) start3(elapsed - self.delay); } function start3(elapsed) { var i, j, n, o; if (self.state !== SCHEDULED) return stop(); for (i in schedules) { o = schedules[i]; if (o.name !== self.name) continue; if (o.state === STARTED) return timeout_default(start3); if (o.state === RUNNING) { o.state = ENDED; o.timer.stop(); o.on.call("interrupt", node, node.__data__, o.index, o.group); delete schedules[i]; } else if (+i < id2) { o.state = ENDED; o.timer.stop(); o.on.call("cancel", node, node.__data__, o.index, o.group); delete schedules[i]; } } timeout_default(function() { if (self.state === STARTED) { self.state = RUNNING; self.timer.restart(tick, self.delay, self.time); tick(elapsed); } }); self.state = STARTING; self.on.call("start", node, node.__data__, self.index, self.group); if (self.state !== STARTING) return; self.state = STARTED; tween = new Array(n = self.tween.length); for (i = 0, j = -1; i < n; ++i) { if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { tween[++j] = o; } } tween.length = j + 1; } function tick(elapsed) { var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), i = -1, n = tween.length; while (++i < n) { tween[i].call(node, t); } if (self.state === ENDING) { self.on.call("end", node, node.__data__, self.index, self.group); stop(); } } function stop() { self.state = ENDED; self.timer.stop(); delete schedules[id2]; for (var i in schedules) return; delete node.__transition; } } // node_modules/d3-transition/src/interrupt.js function interrupt_default(node, name) { var schedules = node.__transition, schedule, active, empty2 = true, i; if (!schedules) return; name = name == null ? null : name + ""; for (i in schedules) { if ((schedule = schedules[i]).name !== name) { empty2 = false; continue; } active = schedule.state > STARTING && schedule.state < ENDING; schedule.state = ENDED; schedule.timer.stop(); schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group); delete schedules[i]; } if (empty2) delete node.__transition; } // node_modules/d3-transition/src/selection/interrupt.js function interrupt_default2(name) { return this.each(function() { interrupt_default(this, name); }); } // node_modules/d3-transition/src/transition/tween.js function tweenRemove(id2, name) { var tween0, tween1; return function() { var schedule = set2(this, id2), tween = schedule.tween; if (tween !== tween0) { tween1 = tween0 = tween; for (var i = 0, n = tween1.length; i < n; ++i) { if (tween1[i].name === name) { tween1 = tween1.slice(); tween1.splice(i, 1); break; } } } schedule.tween = tween1; }; } function tweenFunction(id2, name, value) { var tween0, tween1; if (typeof value !== "function") throw new Error(); return function() { var schedule = set2(this, id2), tween = schedule.tween; if (tween !== tween0) { tween1 = (tween0 = tween).slice(); for (var t = { name, value }, i = 0, n = tween1.length; i < n; ++i) { if (tween1[i].name === name) { tween1[i] = t; break; } } if (i === n) tween1.push(t); } schedule.tween = tween1; }; } function tween_default(name, value) { var id2 = this._id; name += ""; if (arguments.length < 2) { var tween = get2(this.node(), id2).tween; for (var i = 0, n = tween.length, t; i < n; ++i) { if ((t = tween[i]).name === name) { return t.value; } } return null; } return this.each((value == null ? tweenRemove : tweenFunction)(id2, name, value)); } function tweenValue(transition3, name, value) { var id2 = transition3._id; transition3.each(function() { var schedule = set2(this, id2); (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); }); return function(node) { return get2(node, id2).value[name]; }; } // node_modules/d3-transition/src/transition/interpolate.js function interpolate_default(a2, b) { var c2; return (typeof b === "number" ? number_default : b instanceof color ? rgb_default : (c2 = color(b)) ? (b = c2, rgb_default) : string_default)(a2, b); } // node_modules/d3-transition/src/transition/attr.js function attrRemove2(name) { return function() { this.removeAttribute(name); }; } function attrRemoveNS2(fullname) { return function() { this.removeAttributeNS(fullname.space, fullname.local); }; } function attrConstant2(name, interpolate, value1) { var string00, string1 = value1 + "", interpolate0; return function() { var string0 = this.getAttribute(name); return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1); }; } function attrConstantNS2(fullname, interpolate, value1) { var string00, string1 = value1 + "", interpolate0; return function() { var string0 = this.getAttributeNS(fullname.space, fullname.local); return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1); }; } function attrFunction2(name, interpolate, value) { var string00, string10, interpolate0; return function() { var string0, value1 = value(this), string1; if (value1 == null) return void this.removeAttribute(name); string0 = this.getAttribute(name); string1 = value1 + ""; return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); }; } function attrFunctionNS2(fullname, interpolate, value) { var string00, string10, interpolate0; return function() { var string0, value1 = value(this), string1; if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); string0 = this.getAttributeNS(fullname.space, fullname.local); string1 = value1 + ""; return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); }; } function attr_default2(name, value) { var fullname = namespace_default(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate_default; return this.attrTween(name, typeof value === "function" ? (fullname.local ? attrFunctionNS2 : attrFunction2)(fullname, i, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attrRemoveNS2 : attrRemove2)(fullname) : (fullname.local ? attrConstantNS2 : attrConstant2)(fullname, i, value)); } // node_modules/d3-transition/src/transition/attrTween.js function attrInterpolate(name, i) { return function(t) { this.setAttribute(name, i.call(this, t)); }; } function attrInterpolateNS(fullname, i) { return function(t) { this.setAttributeNS(fullname.space, fullname.local, i.call(this, t)); }; } function attrTweenNS(fullname, value) { var t0, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i); return t0; } tween._value = value; return tween; } function attrTween(name, value) { var t0, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i); return t0; } tween._value = value; return tween; } function attrTween_default(name, value) { var key = "attr." + name; if (arguments.length < 2) return (key = this.tween(key)) && key._value; if (value == null) return this.tween(key, null); if (typeof value !== "function") throw new Error(); var fullname = namespace_default(name); return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); } // node_modules/d3-transition/src/transition/delay.js function delayFunction(id2, value) { return function() { init(this, id2).delay = +value.apply(this, arguments); }; } function delayConstant(id2, value) { return value = +value, function() { init(this, id2).delay = value; }; } function delay_default(value) { var id2 = this._id; return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id2, value)) : get2(this.node(), id2).delay; } // node_modules/d3-transition/src/transition/duration.js function durationFunction(id2, value) { return function() { set2(this, id2).duration = +value.apply(this, arguments); }; } function durationConstant(id2, value) { return value = +value, function() { set2(this, id2).duration = value; }; } function duration_default(value) { var id2 = this._id; return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id2, value)) : get2(this.node(), id2).duration; } // node_modules/d3-transition/src/transition/ease.js function easeConstant(id2, value) { if (typeof value !== "function") throw new Error(); return function() { set2(this, id2).ease = value; }; } function ease_default(value) { var id2 = this._id; return arguments.length ? this.each(easeConstant(id2, value)) : get2(this.node(), id2).ease; } // node_modules/d3-transition/src/transition/easeVarying.js function easeVarying(id2, value) { return function() { var v = value.apply(this, arguments); if (typeof v !== "function") throw new Error(); set2(this, id2).ease = v; }; } function easeVarying_default(value) { if (typeof value !== "function") throw new Error(); return this.each(easeVarying(this._id, value)); } // node_modules/d3-transition/src/transition/filter.js function filter_default2(match) { if (typeof match !== "function") match = matcher_default(match); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { if ((node = group[i]) && match.call(node, node.__data__, i, group)) { subgroup.push(node); } } } return new Transition(subgroups, this._parents, this._name, this._id); } // node_modules/d3-transition/src/transition/merge.js function merge_default2(transition3) { if (transition3._id !== this._id) throw new Error(); for (var groups0 = this._groups, groups1 = transition3._groups, m0 = groups0.length, m1 = groups1.length, m2 = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m2; ++j) { for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { if (node = group0[i] || group1[i]) { merge[i] = node; } } } for (; j < m0; ++j) { merges[j] = groups0[j]; } return new Transition(merges, this._parents, this._name, this._id); } // node_modules/d3-transition/src/transition/on.js function start2(name) { return (name + "").trim().split(/^|\s+/).every(function(t) { var i = t.indexOf("."); if (i >= 0) t = t.slice(0, i); return !t || t === "start"; }); } function onFunction(id2, name, listener) { var on0, on1, sit = start2(name) ? init : set2; return function() { var schedule = sit(this, id2), on = schedule.on; if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); schedule.on = on1; }; } function on_default2(name, listener) { var id2 = this._id; return arguments.length < 2 ? get2(this.node(), id2).on.on(name) : this.each(onFunction(id2, name, listener)); } // node_modules/d3-transition/src/transition/remove.js function removeFunction(id2) { return function() { var parent = this.parentNode; for (var i in this.__transition) if (+i !== id2) return; if (parent) parent.removeChild(this); }; } function remove_default2() { return this.on("end.remove", removeFunction(this._id)); } // node_modules/d3-transition/src/transition/select.js function select_default3(select) { var name = this._name, id2 = this._id; if (typeof select !== "function") select = selector_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = new Array(m2), j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { if ("__data__" in node) subnode.__data__ = node.__data__; subgroup[i] = subnode; schedule_default(subgroup[i], name, id2, i, subgroup, get2(node, id2)); } } } return new Transition(subgroups, this._parents, name, id2); } // node_modules/d3-transition/src/transition/selectAll.js function selectAll_default2(select) { var name = this._name, id2 = this._id; if (typeof select !== "function") select = selectorAll_default(select); for (var groups = this._groups, m2 = groups.length, subgroups = [], parents = [], j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { for (var children2 = select.call(node, node.__data__, i, group), child, inherit2 = get2(node, id2), k = 0, l = children2.length; k < l; ++k) { if (child = children2[k]) { schedule_default(child, name, id2, k, children2, inherit2); } } subgroups.push(children2); parents.push(node); } } } return new Transition(subgroups, parents, name, id2); } // node_modules/d3-transition/src/transition/selection.js var Selection2 = selection_default.prototype.constructor; function selection_default2() { return new Selection2(this._groups, this._parents); } // node_modules/d3-transition/src/transition/style.js function styleNull(name, interpolate) { var string00, string10, interpolate0; return function() { var string0 = styleValue(this, name), string1 = (this.style.removeProperty(name), styleValue(this, name)); return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate(string00 = string0, string10 = string1); }; } function styleRemove2(name) { return function() { this.style.removeProperty(name); }; } function styleConstant2(name, interpolate, value1) { var string00, string1 = value1 + "", interpolate0; return function() { var string0 = styleValue(this, name); return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1); }; } function styleFunction2(name, interpolate, value) { var string00, string10, interpolate0; return function() { var string0 = styleValue(this, name), value1 = value(this), string1 = value1 + ""; if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); }; } function styleMaybeRemove(id2, name) { var on0, on1, listener0, key = "style." + name, event = "end." + key, remove2; return function() { var schedule = set2(this, id2), on = schedule.on, listener = schedule.value[key] == null ? remove2 || (remove2 = styleRemove2(name)) : void 0; if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener); schedule.on = on1; }; } function style_default2(name, value, priority) { var i = (name += "") === "transform" ? interpolateTransformCss : interpolate_default; return value == null ? this.styleTween(name, styleNull(name, i)).on("end.style." + name, styleRemove2(name)) : typeof value === "function" ? this.styleTween(name, styleFunction2(name, i, tweenValue(this, "style." + name, value))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, styleConstant2(name, i, value), priority).on("end.style." + name, null); } // node_modules/d3-transition/src/transition/styleTween.js function styleInterpolate(name, i, priority) { return function(t) { this.style.setProperty(name, i.call(this, t), priority); }; } function styleTween(name, value, priority) { var t, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority); return t; } tween._value = value; return tween; } function styleTween_default(name, value, priority) { var key = "style." + (name += ""); if (arguments.length < 2) return (key = this.tween(key)) && key._value; if (value == null) return this.tween(key, null); if (typeof value !== "function") throw new Error(); return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); } // node_modules/d3-transition/src/transition/text.js function textConstant2(value) { return function() { this.textContent = value; }; } function textFunction2(value) { return function() { var value1 = value(this); this.textContent = value1 == null ? "" : value1; }; } function text_default2(value) { return this.tween("text", typeof value === "function" ? textFunction2(tweenValue(this, "text", value)) : textConstant2(value == null ? "" : value + "")); } // node_modules/d3-transition/src/transition/textTween.js function textInterpolate(i) { return function(t) { this.textContent = i.call(this, t); }; } function textTween(value) { var t0, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t0 = (i0 = i) && textInterpolate(i); return t0; } tween._value = value; return tween; } function textTween_default(value) { var key = "text"; if (arguments.length < 1) return (key = this.tween(key)) && key._value; if (value == null) return this.tween(key, null); if (typeof value !== "function") throw new Error(); return this.tween(key, textTween(value)); } // node_modules/d3-transition/src/transition/transition.js function transition_default() { var name = this._name, id0 = this._id, id1 = newId(); for (var groups = this._groups, m2 = groups.length, j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { var inherit2 = get2(node, id0); schedule_default(node, name, id1, i, group, { time: inherit2.time + inherit2.delay + inherit2.duration, delay: 0, duration: inherit2.duration, ease: inherit2.ease }); } } } return new Transition(groups, this._parents, name, id1); } // node_modules/d3-transition/src/transition/end.js function end_default() { var on0, on1, that = this, id2 = that._id, size = that.size(); return new Promise(function(resolve, reject) { var cancel = { value: reject }, end2 = { value: function() { if (--size === 0) resolve(); } }; that.each(function() { var schedule = set2(this, id2), on = schedule.on; if (on !== on0) { on1 = (on0 = on).copy(); on1._.cancel.push(cancel); on1._.interrupt.push(cancel); on1._.end.push(end2); } schedule.on = on1; }); if (size === 0) resolve(); }); } // node_modules/d3-transition/src/transition/index.js var id = 0; function Transition(groups, parents, name, id2) { this._groups = groups; this._parents = parents; this._name = name; this._id = id2; } function transition(name) { return selection_default().transition(name); } function newId() { return ++id; } var selection_prototype = selection_default.prototype; Transition.prototype = transition.prototype = { constructor: Transition, select: select_default3, selectAll: selectAll_default2, selectChild: selection_prototype.selectChild, selectChildren: selection_prototype.selectChildren, filter: filter_default2, merge: merge_default2, selection: selection_default2, transition: transition_default, call: selection_prototype.call, nodes: selection_prototype.nodes, node: selection_prototype.node, size: selection_prototype.size, empty: selection_prototype.empty, each: selection_prototype.each, on: on_default2, attr: attr_default2, attrTween: attrTween_default, style: style_default2, styleTween: styleTween_default, text: text_default2, textTween: textTween_default, remove: remove_default2, tween: tween_default, delay: delay_default, duration: duration_default, ease: ease_default, easeVarying: easeVarying_default, end: end_default, [Symbol.iterator]: selection_prototype[Symbol.iterator] }; // node_modules/d3-ease/src/cubic.js function cubicInOut(t) { return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; } // node_modules/d3-transition/src/selection/transition.js var defaultTiming = { time: null, delay: 0, duration: 250, ease: cubicInOut }; function inherit(node, id2) { var timing; while (!(timing = node.__transition) || !(timing = timing[id2])) { if (!(node = node.parentNode)) { throw new Error(`transition ${id2} not found`); } } return timing; } function transition_default2(name) { var id2, timing; if (name instanceof Transition) { id2 = name._id, name = name._name; } else { id2 = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; } for (var groups = this._groups, m2 = groups.length, j = 0; j < m2; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { schedule_default(node, name, id2, i, group, timing || inherit(node, id2)); } } } return new Transition(groups, this._parents, name, id2); } // node_modules/d3-transition/src/selection/index.js selection_default.prototype.interrupt = interrupt_default2; selection_default.prototype.transition = transition_default2; // node_modules/d3-brush/src/brush.js var { abs, max: max2, min: min2 } = Math; function number1(e) { return [+e[0], +e[1]]; } function number2(e) { return [number1(e[0]), number1(e[1])]; } var X = { name: "x", handles: ["w", "e"].map(type), input: function(x2, e) { return x2 == null ? null : [[+x2[0], e[0][1]], [+x2[1], e[1][1]]]; }, output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } }; var Y = { name: "y", handles: ["n", "s"].map(type), input: function(y2, e) { return y2 == null ? null : [[e[0][0], +y2[0]], [e[1][0], +y2[1]]]; }, output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } }; var XY = { name: "xy", handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type), input: function(xy) { return xy == null ? null : number2(xy); }, output: function(xy) { return xy; } }; function type(t) { return { type: t }; } // node_modules/d3-quadtree/src/add.js function add_default(d) { const x2 = +this._x.call(null, d), y2 = +this._y.call(null, d); return add(this.cover(x2, y2), x2, y2, d); } function add(tree, x2, y2, d) { if (isNaN(x2) || isNaN(y2)) return tree; var parent, node = tree._root, leaf = { data: d }, x0 = tree._x0, y0 = tree._y0, x1 = tree._x1, y1 = tree._y1, xm, ym, xp, yp, right2, bottom2, i, j; if (!node) return tree._root = leaf, tree; while (node.length) { if (right2 = x2 >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; if (bottom2 = y2 >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; if (parent = node, !(node = node[i = bottom2 << 1 | right2])) return parent[i] = leaf, tree; } xp = +tree._x.call(null, node.data); yp = +tree._y.call(null, node.data); if (x2 === xp && y2 === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; do { parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); if (right2 = x2 >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; if (bottom2 = y2 >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; } while ((i = bottom2 << 1 | right2) === (j = (yp >= ym) << 1 | xp >= xm)); return parent[j] = node, parent[i] = leaf, tree; } function addAll(data) { var d, i, n = data.length, x2, y2, xz = new Array(n), yz = new Array(n), x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity; for (i = 0; i < n; ++i) { if (isNaN(x2 = +this._x.call(null, d = data[i])) || isNaN(y2 = +this._y.call(null, d))) continue; xz[i] = x2; yz[i] = y2; if (x2 < x0) x0 = x2; if (x2 > x1) x1 = x2; if (y2 < y0) y0 = y2; if (y2 > y1) y1 = y2; } if (x0 > x1 || y0 > y1) return this; this.cover(x0, y0).cover(x1, y1); for (i = 0; i < n; ++i) { add(this, xz[i], yz[i], data[i]); } return this; } // node_modules/d3-quadtree/src/cover.js function cover_default(x2, y2) { if (isNaN(x2 = +x2) || isNaN(y2 = +y2)) return this; var x0 = this._x0, y0 = this._y0, x1 = this._x1, y1 = this._y1; if (isNaN(x0)) { x1 = (x0 = Math.floor(x2)) + 1; y1 = (y0 = Math.floor(y2)) + 1; } else { var z = x1 - x0 || 1, node = this._root, parent, i; while (x0 > x2 || x2 >= x1 || y0 > y2 || y2 >= y1) { i = (y2 < y0) << 1 | x2 < x0; parent = new Array(4), parent[i] = node, node = parent, z *= 2; switch (i) { case 0: x1 = x0 + z, y1 = y0 + z; break; case 1: x0 = x1 - z, y1 = y0 + z; break; case 2: x1 = x0 + z, y0 = y1 - z; break; case 3: x0 = x1 - z, y0 = y1 - z; break; } } if (this._root && this._root.length) this._root = node; } this._x0 = x0; this._y0 = y0; this._x1 = x1; this._y1 = y1; return this; } // node_modules/d3-quadtree/src/data.js function data_default2() { var data = []; this.visit(function(node) { if (!node.length) do data.push(node.data); while (node = node.next); }); return data; } // node_modules/d3-quadtree/src/extent.js function extent_default(_) { return arguments.length ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) : isNaN(this._x0) ? void 0 : [[this._x0, this._y0], [this._x1, this._y1]]; } // node_modules/d3-quadtree/src/quad.js function quad_default(node, x0, y0, x1, y1) { this.node = node; this.x0 = x0; this.y0 = y0; this.x1 = x1; this.y1 = y1; } // node_modules/d3-quadtree/src/find.js function find_default(x2, y2, radius) { var data, x0 = this._x0, y0 = this._y0, x1, y1, x22, y22, x3 = this._x1, y3 = this._y1, quads = [], node = this._root, q, i; if (node) quads.push(new quad_default(node, x0, y0, x3, y3)); if (radius == null) radius = Infinity; else { x0 = x2 - radius, y0 = y2 - radius; x3 = x2 + radius, y3 = y2 + radius; radius *= radius; } while (q = quads.pop()) { if (!(node = q.node) || (x1 = q.x0) > x3 || (y1 = q.y0) > y3 || (x22 = q.x1) < x0 || (y22 = q.y1) < y0) continue; if (node.length) { var xm = (x1 + x22) / 2, ym = (y1 + y22) / 2; quads.push( new quad_default(node[3], xm, ym, x22, y22), new quad_default(node[2], x1, ym, xm, y22), new quad_default(node[1], xm, y1, x22, ym), new quad_default(node[0], x1, y1, xm, ym) ); if (i = (y2 >= ym) << 1 | x2 >= xm) { q = quads[quads.length - 1]; quads[quads.length - 1] = quads[quads.length - 1 - i]; quads[quads.length - 1 - i] = q; } } else { var dx = x2 - +this._x.call(null, node.data), dy = y2 - +this._y.call(null, node.data), d2 = dx * dx + dy * dy; if (d2 < radius) { var d = Math.sqrt(radius = d2); x0 = x2 - d, y0 = y2 - d; x3 = x2 + d, y3 = y2 + d; data = node.data; } } } return data; } // node_modules/d3-quadtree/src/remove.js function remove_default3(d) { if (isNaN(x2 = +this._x.call(null, d)) || isNaN(y2 = +this._y.call(null, d))) return this; var parent, node = this._root, retainer, previous, next, x0 = this._x0, y0 = this._y0, x1 = this._x1, y1 = this._y1, x2, y2, xm, ym, right2, bottom2, i, j; if (!node) return this; if (node.length) while (true) { if (right2 = x2 >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; if (bottom2 = y2 >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; if (!(parent = node, node = node[i = bottom2 << 1 | right2])) return this; if (!node.length) break; if (parent[i + 1 & 3] || parent[i + 2 & 3] || parent[i + 3 & 3]) retainer = parent, j = i; } while (node.data !== d) if (!(previous = node, node = node.next)) return this; if (next = node.next) delete node.next; if (previous) return next ? previous.next = next : delete previous.next, this; if (!parent) return this._root = next, this; next ? parent[i] = next : delete parent[i]; if ((node = parent[0] || parent[1] || parent[2] || parent[3]) && node === (parent[3] || parent[2] || parent[1] || parent[0]) && !node.length) { if (retainer) retainer[j] = node; else this._root = node; } return this; } function removeAll(data) { for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); return this; } // node_modules/d3-quadtree/src/root.js function root_default() { return this._root; } // node_modules/d3-quadtree/src/size.js function size_default2() { var size = 0; this.visit(function(node) { if (!node.length) do ++size; while (node = node.next); }); return size; } // node_modules/d3-quadtree/src/visit.js function visit_default(callback) { var quads = [], q, node = this._root, child, x0, y0, x1, y1; if (node) quads.push(new quad_default(node, this._x0, this._y0, this._x1, this._y1)); while (q = quads.pop()) { if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; if (child = node[3]) quads.push(new quad_default(child, xm, ym, x1, y1)); if (child = node[2]) quads.push(new quad_default(child, x0, ym, xm, y1)); if (child = node[1]) quads.push(new quad_default(child, xm, y0, x1, ym)); if (child = node[0]) quads.push(new quad_default(child, x0, y0, xm, ym)); } } return this; } // node_modules/d3-quadtree/src/visitAfter.js function visitAfter_default(callback) { var quads = [], next = [], q; if (this._root) quads.push(new quad_default(this._root, this._x0, this._y0, this._x1, this._y1)); while (q = quads.pop()) { var node = q.node; if (node.length) { var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; if (child = node[0]) quads.push(new quad_default(child, x0, y0, xm, ym)); if (child = node[1]) quads.push(new quad_default(child, xm, y0, x1, ym)); if (child = node[2]) quads.push(new quad_default(child, x0, ym, xm, y1)); if (child = node[3]) quads.push(new quad_default(child, xm, ym, x1, y1)); } next.push(q); } while (q = next.pop()) { callback(q.node, q.x0, q.y0, q.x1, q.y1); } return this; } // node_modules/d3-quadtree/src/x.js function defaultX(d) { return d[0]; } function x_default(_) { return arguments.length ? (this._x = _, this) : this._x; } // node_modules/d3-quadtree/src/y.js function defaultY(d) { return d[1]; } function y_default(_) { return arguments.length ? (this._y = _, this) : this._y; } // node_modules/d3-quadtree/src/quadtree.js function quadtree(nodes, x2, y2) { var tree = new Quadtree(x2 == null ? defaultX : x2, y2 == null ? defaultY : y2, NaN, NaN, NaN, NaN); return nodes == null ? tree : tree.addAll(nodes); } function Quadtree(x2, y2, x0, y0, x1, y1) { this._x = x2; this._y = y2; this._x0 = x0; this._y0 = y0; this._x1 = x1; this._y1 = y1; this._root = void 0; } function leaf_copy(leaf) { var copy = { data: leaf.data }, next = copy; while (leaf = leaf.next) next = next.next = { data: leaf.data }; return copy; } var treeProto = quadtree.prototype = Quadtree.prototype; treeProto.copy = function() { var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), node = this._root, nodes, child; if (!node) return copy; if (!node.length) return copy._root = leaf_copy(node), copy; nodes = [{ source: node, target: copy._root = new Array(4) }]; while (node = nodes.pop()) { for (var i = 0; i < 4; ++i) { if (child = node.source[i]) { if (child.length) nodes.push({ source: child, target: node.target[i] = new Array(4) }); else node.target[i] = leaf_copy(child); } } } return copy; }; treeProto.add = add_default; treeProto.addAll = addAll; treeProto.cover = cover_default; treeProto.data = data_default2; treeProto.extent = extent_default; treeProto.find = find_default; treeProto.remove = remove_default3; treeProto.removeAll = removeAll; treeProto.root = root_default; treeProto.size = size_default2; treeProto.visit = visit_default; treeProto.visitAfter = visitAfter_default; treeProto.x = x_default; treeProto.y = y_default; // node_modules/d3-force/src/constant.js function constant_default5(x2) { return function() { return x2; }; } // node_modules/d3-force/src/jiggle.js function jiggle_default(random) { return (random() - 0.5) * 1e-6; } // node_modules/d3-force/src/link.js function index(d) { return d.index; } function find2(nodeById, nodeId) { var node = nodeById.get(nodeId); if (!node) throw new Error("node not found: " + nodeId); return node; } function link_default(links) { var id2 = index, strength = defaultStrength, strengths, distance = constant_default5(30), distances, nodes, count, bias, random, iterations = 1; if (links == null) links = []; function defaultStrength(link) { return 1 / Math.min(count[link.source.index], count[link.target.index]); } function force(alpha) { for (var k = 0, n = links.length; k < iterations; ++k) { for (var i = 0, link, source, target, x2, y2, l, b; i < n; ++i) { link = links[i], source = link.source, target = link.target; x2 = target.x + target.vx - source.x - source.vx || jiggle_default(random); y2 = target.y + target.vy - source.y - source.vy || jiggle_default(random); l = Math.sqrt(x2 * x2 + y2 * y2); l = (l - distances[i]) / l * alpha * strengths[i]; x2 *= l, y2 *= l; target.vx -= x2 * (b = bias[i]); target.vy -= y2 * b; source.vx += x2 * (b = 1 - b); source.vy += y2 * b; } } } function initialize() { if (!nodes) return; var i, n = nodes.length, m2 = links.length, nodeById = new Map(nodes.map((d, i2) => [id2(d, i2, nodes), d])), link; for (i = 0, count = new Array(n); i < m2; ++i) { link = links[i], link.index = i; if (typeof link.source !== "object") link.source = find2(nodeById, link.source); if (typeof link.target !== "object") link.target = find2(nodeById, link.target); count[link.source.index] = (count[link.source.index] || 0) + 1; count[link.target.index] = (count[link.target.index] || 0) + 1; } for (i = 0, bias = new Array(m2); i < m2; ++i) { link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); } strengths = new Array(m2), initializeStrength(); distances = new Array(m2), initializeDistance(); } function initializeStrength() { if (!nodes) return; for (var i = 0, n = links.length; i < n; ++i) { strengths[i] = +strength(links[i], i, links); } } function initializeDistance() { if (!nodes) return; for (var i = 0, n = links.length; i < n; ++i) { distances[i] = +distance(links[i], i, links); } } force.initialize = function(_nodes, _random) { nodes = _nodes; random = _random; initialize(); }; force.links = function(_) { return arguments.length ? (links = _, initialize(), force) : links; }; force.id = function(_) { return arguments.length ? (id2 = _, force) : id2; }; force.iterations = function(_) { return arguments.length ? (iterations = +_, force) : iterations; }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant_default5(+_), initializeStrength(), force) : strength; }; force.distance = function(_) { return arguments.length ? (distance = typeof _ === "function" ? _ : constant_default5(+_), initializeDistance(), force) : distance; }; return force; } // node_modules/d3-force/src/lcg.js var a = 1664525; var c = 1013904223; var m = 4294967296; function lcg_default() { let s = 1; return () => (s = (a * s + c) % m) / m; } // node_modules/d3-force/src/simulation.js function x(d) { return d.x; } function y(d) { return d.y; } var initialRadius = 10; var initialAngle = Math.PI * (3 - Math.sqrt(5)); function simulation_default(nodes) { var simulation, alpha = 1, alphaMin = 1e-3, alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), alphaTarget = 0, velocityDecay = 0.6, forces = /* @__PURE__ */ new Map(), stepper = timer(step), event = dispatch_default("tick", "end"), random = lcg_default(); if (nodes == null) nodes = []; function step() { tick(); event.call("tick", simulation); if (alpha < alphaMin) { stepper.stop(); event.call("end", simulation); } } function tick(iterations) { var i, n = nodes.length, node; if (iterations === void 0) iterations = 1; for (var k = 0; k < iterations; ++k) { alpha += (alphaTarget - alpha) * alphaDecay; forces.forEach(function(force) { force(alpha); }); for (i = 0; i < n; ++i) { node = nodes[i]; if (node.fx == null) node.x += node.vx *= velocityDecay; else node.x = node.fx, node.vx = 0; if (node.fy == null) node.y += node.vy *= velocityDecay; else node.y = node.fy, node.vy = 0; } } return simulation; } function initializeNodes() { for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i], node.index = i; if (node.fx != null) node.x = node.fx; if (node.fy != null) node.y = node.fy; if (isNaN(node.x) || isNaN(node.y)) { var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle; node.x = radius * Math.cos(angle); node.y = radius * Math.sin(angle); } if (isNaN(node.vx) || isNaN(node.vy)) { node.vx = node.vy = 0; } } } function initializeForce(force) { if (force.initialize) force.initialize(nodes, random); return force; } initializeNodes(); return simulation = { tick, restart: function() { return stepper.restart(step), simulation; }, stop: function() { return stepper.stop(), simulation; }, nodes: function(_) { return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; }, alpha: function(_) { return arguments.length ? (alpha = +_, simulation) : alpha; }, alphaMin: function(_) { return arguments.length ? (alphaMin = +_, simulation) : alphaMin; }, alphaDecay: function(_) { return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; }, alphaTarget: function(_) { return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; }, velocityDecay: function(_) { return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; }, randomSource: function(_) { return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random; }, force: function(name, _) { return arguments.length > 1 ? (_ == null ? forces.delete(name) : forces.set(name, initializeForce(_)), simulation) : forces.get(name); }, find: function(x2, y2, radius) { var i = 0, n = nodes.length, dx, dy, d2, node, closest; if (radius == null) radius = Infinity; else radius *= radius; for (i = 0; i < n; ++i) { node = nodes[i]; dx = x2 - node.x; dy = y2 - node.y; d2 = dx * dx + dy * dy; if (d2 < radius) closest = node, radius = d2; } return closest; }, on: function(name, _) { return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); } }; } // node_modules/d3-force/src/manyBody.js function manyBody_default() { var nodes, node, random, alpha, strength = constant_default5(-30), strengths, distanceMin2 = 1, distanceMax2 = Infinity, theta2 = 0.81; function force(_) { var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate); for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); } function initialize() { if (!nodes) return; var i, n = nodes.length, node2; strengths = new Array(n); for (i = 0; i < n; ++i) node2 = nodes[i], strengths[node2.index] = +strength(node2, i, nodes); } function accumulate(quad) { var strength2 = 0, q, c2, weight = 0, x2, y2, i; if (quad.length) { for (x2 = y2 = i = 0; i < 4; ++i) { if ((q = quad[i]) && (c2 = Math.abs(q.value))) { strength2 += q.value, weight += c2, x2 += c2 * q.x, y2 += c2 * q.y; } } quad.x = x2 / weight; quad.y = y2 / weight; } else { q = quad; q.x = q.data.x; q.y = q.data.y; do strength2 += strengths[q.data.index]; while (q = q.next); } quad.value = strength2; } function apply(quad, x1, _, x2) { if (!quad.value) return true; var x3 = quad.x - node.x, y2 = quad.y - node.y, w = x2 - x1, l = x3 * x3 + y2 * y2; if (w * w / theta2 < l) { if (l < distanceMax2) { if (x3 === 0) x3 = jiggle_default(random), l += x3 * x3; if (y2 === 0) y2 = jiggle_default(random), l += y2 * y2; if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); node.vx += x3 * quad.value * alpha / l; node.vy += y2 * quad.value * alpha / l; } return true; } else if (quad.length || l >= distanceMax2) return; if (quad.data !== node || quad.next) { if (x3 === 0) x3 = jiggle_default(random), l += x3 * x3; if (y2 === 0) y2 = jiggle_default(random), l += y2 * y2; if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); } do if (quad.data !== node) { w = strengths[quad.data.index] * alpha / l; node.vx += x3 * w; node.vy += y2 * w; } while (quad = quad.next); } force.initialize = function(_nodes, _random) { nodes = _nodes; random = _random; initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant_default5(+_), initialize(), force) : strength; }; force.distanceMin = function(_) { return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); }; force.distanceMax = function(_) { return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); }; force.theta = function(_) { return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); }; return force; } // node_modules/d3-force/src/x.js function x_default2(x2) { var strength = constant_default5(0.1), nodes, strengths, xz; if (typeof x2 !== "function") x2 = constant_default5(x2 == null ? 0 : +x2); function force(alpha) { for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; } } function initialize() { if (!nodes) return; var i, n = nodes.length; strengths = new Array(n); xz = new Array(n); for (i = 0; i < n; ++i) { strengths[i] = isNaN(xz[i] = +x2(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); } } force.initialize = function(_) { nodes = _; initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant_default5(+_), initialize(), force) : strength; }; force.x = function(_) { return arguments.length ? (x2 = typeof _ === "function" ? _ : constant_default5(+_), initialize(), force) : x2; }; return force; } // node_modules/d3-force/src/y.js function y_default2(y2) { var strength = constant_default5(0.1), nodes, strengths, yz; if (typeof y2 !== "function") y2 = constant_default5(y2 == null ? 0 : +y2); function force(alpha) { for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; } } function initialize() { if (!nodes) return; var i, n = nodes.length; strengths = new Array(n); yz = new Array(n); for (i = 0; i < n; ++i) { strengths[i] = isNaN(yz[i] = +y2(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); } } force.initialize = function(_) { nodes = _; initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant_default5(+_), initialize(), force) : strength; }; force.y = function(_) { return arguments.length ? (y2 = typeof _ === "function" ? _ : constant_default5(+_), initialize(), force) : y2; }; return force; } // node_modules/d3-scale/src/init.js function initRange(domain, range) { switch (arguments.length) { case 0: break; case 1: this.range(domain); break; default: this.range(range).domain(domain); break; } return this; } // node_modules/d3-scale/src/ordinal.js var implicit = Symbol("implicit"); function ordinal() { var index2 = new InternMap(), domain = [], range = [], unknown = implicit; function scale(d) { let i = index2.get(d); if (i === void 0) { if (unknown !== implicit) return unknown; index2.set(d, i = domain.push(d) - 1); } return range[i % range.length]; } scale.domain = function(_) { if (!arguments.length) return domain.slice(); domain = [], index2 = new InternMap(); for (const value of _) { if (index2.has(value)) continue; index2.set(value, domain.push(value) - 1); } return scale; }; scale.range = function(_) { return arguments.length ? (range = Array.from(_), scale) : range.slice(); }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; scale.copy = function() { return ordinal(domain, range).unknown(unknown); }; initRange.apply(scale, arguments); return scale; } // node_modules/d3-scale-chromatic/src/colors.js function colors_default(specifier) { var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); return colors; } // node_modules/d3-scale-chromatic/src/categorical/Tableau10.js var Tableau10_default = colors_default("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"); // node_modules/d3-zoom/src/constant.js var constant_default6 = (x2) => () => x2; // node_modules/d3-zoom/src/event.js function ZoomEvent(type2, { sourceEvent, target, transform: transform2, dispatch: dispatch2 }) { Object.defineProperties(this, { type: { value: type2, enumerable: true, configurable: true }, sourceEvent: { value: sourceEvent, enumerable: true, configurable: true }, target: { value: target, enumerable: true, configurable: true }, transform: { value: transform2, enumerable: true, configurable: true }, _: { value: dispatch2 } }); } // node_modules/d3-zoom/src/transform.js function Transform(k, x2, y2) { this.k = k; this.x = x2; this.y = y2; } Transform.prototype = { constructor: Transform, scale: function(k) { return k === 1 ? this : new Transform(this.k * k, this.x, this.y); }, translate: function(x2, y2) { return x2 === 0 & y2 === 0 ? this : new Transform(this.k, this.x + this.k * x2, this.y + this.k * y2); }, apply: function(point) { return [point[0] * this.k + this.x, point[1] * this.k + this.y]; }, applyX: function(x2) { return x2 * this.k + this.x; }, applyY: function(y2) { return y2 * this.k + this.y; }, invert: function(location) { return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; }, invertX: function(x2) { return (x2 - this.x) / this.k; }, invertY: function(y2) { return (y2 - this.y) / this.k; }, rescaleX: function(x2) { return x2.copy().domain(x2.range().map(this.invertX, this).map(x2.invert, x2)); }, rescaleY: function(y2) { return y2.copy().domain(y2.range().map(this.invertY, this).map(y2.invert, y2)); }, toString: function() { return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; } }; var identity2 = new Transform(1, 0, 0); transform.prototype = Transform.prototype; function transform(node) { while (!node.__zoom) if (!(node = node.parentNode)) return identity2; return node.__zoom; } // node_modules/d3-zoom/src/noevent.js function nopropagation3(event) { event.stopImmediatePropagation(); } function noevent_default3(event) { event.preventDefault(); event.stopImmediatePropagation(); } // node_modules/d3-zoom/src/zoom.js function defaultFilter2(event) { return (!event.ctrlKey || event.type === "wheel") && !event.button; } function defaultExtent() { var e = this; if (e instanceof SVGElement) { e = e.ownerSVGElement || e; if (e.hasAttribute("viewBox")) { e = e.viewBox.baseVal; return [[e.x, e.y], [e.x + e.width, e.y + e.height]]; } return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]]; } return [[0, 0], [e.clientWidth, e.clientHeight]]; } function defaultTransform() { return this.__zoom || identity2; } function defaultWheelDelta(event) { return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 2e-3) * (event.ctrlKey ? 10 : 1); } function defaultTouchable2() { return navigator.maxTouchPoints || "ontouchstart" in this; } function defaultConstrain(transform2, extent, translateExtent) { var dx0 = transform2.invertX(extent[0][0]) - translateExtent[0][0], dx1 = transform2.invertX(extent[1][0]) - translateExtent[1][0], dy0 = transform2.invertY(extent[0][1]) - translateExtent[0][1], dy1 = transform2.invertY(extent[1][1]) - translateExtent[1][1]; return transform2.translate( dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) ); } function zoom_default2() { var filter2 = defaultFilter2, extent = defaultExtent, constrain = defaultConstrain, wheelDelta = defaultWheelDelta, touchable = defaultTouchable2, scaleExtent = [0, Infinity], translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], duration = 250, interpolate = zoom_default, listeners = dispatch_default("start", "zoom", "end"), touchstarting, touchfirst, touchending, touchDelay = 500, wheelDelay = 150, clickDistance2 = 0, tapDistance = 10; function zoom(selection2) { selection2.property("__zoom", defaultTransform).on("wheel.zoom", wheeled, { passive: false }).on("mousedown.zoom", mousedowned).on("dblclick.zoom", dblclicked).filter(touchable).on("touchstart.zoom", touchstarted).on("touchmove.zoom", touchmoved).on("touchend.zoom touchcancel.zoom", touchended).style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); } zoom.transform = function(collection, transform2, point, event) { var selection2 = collection.selection ? collection.selection() : collection; selection2.property("__zoom", defaultTransform); if (collection !== selection2) { schedule(collection, transform2, point, event); } else { selection2.interrupt().each(function() { gesture(this, arguments).event(event).start().zoom(null, typeof transform2 === "function" ? transform2.apply(this, arguments) : transform2).end(); }); } }; zoom.scaleBy = function(selection2, k, p, event) { zoom.scaleTo(selection2, function() { var k0 = this.__zoom.k, k1 = typeof k === "function" ? k.apply(this, arguments) : k; return k0 * k1; }, p, event); }; zoom.scaleTo = function(selection2, k, p, event) { zoom.transform(selection2, function() { var e = extent.apply(this, arguments), t0 = this.__zoom, p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p, p1 = t0.invert(p0), k1 = typeof k === "function" ? k.apply(this, arguments) : k; return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); }, p, event); }; zoom.translateBy = function(selection2, x2, y2, event) { zoom.transform(selection2, function() { return constrain(this.__zoom.translate( typeof x2 === "function" ? x2.apply(this, arguments) : x2, typeof y2 === "function" ? y2.apply(this, arguments) : y2 ), extent.apply(this, arguments), translateExtent); }, null, event); }; zoom.translateTo = function(selection2, x2, y2, p, event) { zoom.transform(selection2, function() { var e = extent.apply(this, arguments), t = this.__zoom, p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p; return constrain(identity2.translate(p0[0], p0[1]).scale(t.k).translate( typeof x2 === "function" ? -x2.apply(this, arguments) : -x2, typeof y2 === "function" ? -y2.apply(this, arguments) : -y2 ), e, translateExtent); }, p, event); }; function scale(transform2, k) { k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); return k === transform2.k ? transform2 : new Transform(k, transform2.x, transform2.y); } function translate(transform2, p0, p1) { var x2 = p0[0] - p1[0] * transform2.k, y2 = p0[1] - p1[1] * transform2.k; return x2 === transform2.x && y2 === transform2.y ? transform2 : new Transform(transform2.k, x2, y2); } function centroid(extent2) { return [(+extent2[0][0] + +extent2[1][0]) / 2, (+extent2[0][1] + +extent2[1][1]) / 2]; } function schedule(transition3, transform2, point, event) { transition3.on("start.zoom", function() { gesture(this, arguments).event(event).start(); }).on("interrupt.zoom end.zoom", function() { gesture(this, arguments).event(event).end(); }).tween("zoom", function() { var that = this, args = arguments, g = gesture(that, args).event(event), e = extent.apply(that, args), p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point, w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), a2 = that.__zoom, b = typeof transform2 === "function" ? transform2.apply(that, args) : transform2, i = interpolate(a2.invert(p).concat(w / a2.k), b.invert(p).concat(w / b.k)); return function(t) { if (t === 1) t = b; else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } g.zoom(null, t); }; }); } function gesture(that, args, clean) { return !clean && that.__zooming || new Gesture(that, args); } function Gesture(that, args) { this.that = that; this.args = args; this.active = 0; this.sourceEvent = null; this.extent = extent.apply(that, args); this.taps = 0; } Gesture.prototype = { event: function(event) { if (event) this.sourceEvent = event; return this; }, start: function() { if (++this.active === 1) { this.that.__zooming = this; this.emit("start"); } return this; }, zoom: function(key, transform2) { if (this.mouse && key !== "mouse") this.mouse[1] = transform2.invert(this.mouse[0]); if (this.touch0 && key !== "touch") this.touch0[1] = transform2.invert(this.touch0[0]); if (this.touch1 && key !== "touch") this.touch1[1] = transform2.invert(this.touch1[0]); this.that.__zoom = transform2; this.emit("zoom"); return this; }, end: function() { if (--this.active === 0) { delete this.that.__zooming; this.emit("end"); } return this; }, emit: function(type2) { var d = select_default2(this.that).datum(); listeners.call( type2, this.that, new ZoomEvent(type2, { sourceEvent: this.sourceEvent, target: zoom, type: type2, transform: this.that.__zoom, dispatch: listeners }), d ); } }; function wheeled(event, ...args) { if (!filter2.apply(this, arguments)) return; var g = gesture(this, args).event(event), t = this.__zoom, k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), p = pointer_default(event); if (g.wheel) { if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { g.mouse[1] = t.invert(g.mouse[0] = p); } clearTimeout(g.wheel); } else if (t.k === k) return; else { g.mouse = [p, t.invert(p)]; interrupt_default(this); g.start(); } noevent_default3(event); g.wheel = setTimeout(wheelidled, wheelDelay); g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); function wheelidled() { g.wheel = null; g.end(); } } function mousedowned(event, ...args) { if (touchending || !filter2.apply(this, arguments)) return; var currentTarget = event.currentTarget, g = gesture(this, args, true).event(event), v = select_default2(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), p = pointer_default(event, currentTarget), x0 = event.clientX, y0 = event.clientY; nodrag_default(event.view); nopropagation3(event); g.mouse = [p, this.__zoom.invert(p)]; interrupt_default(this); g.start(); function mousemoved(event2) { noevent_default3(event2); if (!g.moved) { var dx = event2.clientX - x0, dy = event2.clientY - y0; g.moved = dx * dx + dy * dy > clickDistance2; } g.event(event2).zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = pointer_default(event2, currentTarget), g.mouse[1]), g.extent, translateExtent)); } function mouseupped(event2) { v.on("mousemove.zoom mouseup.zoom", null); yesdrag(event2.view, g.moved); noevent_default3(event2); g.event(event2).end(); } } function dblclicked(event, ...args) { if (!filter2.apply(this, arguments)) return; var t0 = this.__zoom, p0 = pointer_default(event.changedTouches ? event.changedTouches[0] : event, this), p1 = t0.invert(p0), k1 = t0.k * (event.shiftKey ? 0.5 : 2), t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent); noevent_default3(event); if (duration > 0) select_default2(this).transition().duration(duration).call(schedule, t1, p0, event); else select_default2(this).call(zoom.transform, t1, p0, event); } function touchstarted(event, ...args) { if (!filter2.apply(this, arguments)) return; var touches = event.touches, n = touches.length, g = gesture(this, args, event.changedTouches.length === n).event(event), started, i, t, p; nopropagation3(event); for (i = 0; i < n; ++i) { t = touches[i], p = pointer_default(t, this); p = [p, this.__zoom.invert(p), t.identifier]; if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0; } if (touchstarting) touchstarting = clearTimeout(touchstarting); if (started) { if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); interrupt_default(this); g.start(); } } function touchmoved(event, ...args) { if (!this.__zooming) return; var g = gesture(this, args).event(event), touches = event.changedTouches, n = touches.length, i, t, p, l; noevent_default3(event); for (i = 0; i < n; ++i) { t = touches[i], p = pointer_default(t, this); if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; } t = g.that.__zoom; if (g.touch1) { var p0 = g.touch0[0], l0 = g.touch0[1], p1 = g.touch1[0], l1 = g.touch1[1], dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; t = scale(t, Math.sqrt(dp / dl)); p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; } else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; else return; g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); } function touchended(event, ...args) { if (!this.__zooming) return; var g = gesture(this, args).event(event), touches = event.changedTouches, n = touches.length, i, t; nopropagation3(event); if (touchending) clearTimeout(touchending); touchending = setTimeout(function() { touchending = null; }, touchDelay); for (i = 0; i < n; ++i) { t = touches[i]; if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; } if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); else { g.end(); if (g.taps === 2) { t = pointer_default(t, this); if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) { var p = select_default2(this).on("dblclick.zoom"); if (p) p.apply(this, arguments); } } } } zoom.wheelDelta = function(_) { return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant_default6(+_), zoom) : wheelDelta; }; zoom.filter = function(_) { return arguments.length ? (filter2 = typeof _ === "function" ? _ : constant_default6(!!_), zoom) : filter2; }; zoom.touchable = function(_) { return arguments.length ? (touchable = typeof _ === "function" ? _ : constant_default6(!!_), zoom) : touchable; }; zoom.extent = function(_) { return arguments.length ? (extent = typeof _ === "function" ? _ : constant_default6([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; }; zoom.scaleExtent = function(_) { return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; }; zoom.translateExtent = function(_) { return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; }; zoom.constrain = function(_) { return arguments.length ? (constrain = _, zoom) : constrain; }; zoom.duration = function(_) { return arguments.length ? (duration = +_, zoom) : duration; }; zoom.interpolate = function(_) { return arguments.length ? (interpolate = _, zoom) : interpolate; }; zoom.on = function() { var value = listeners.on.apply(listeners, arguments); return value === listeners ? zoom : value; }; zoom.clickDistance = function(_) { return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); }; zoom.tapDistance = function(_) { return arguments.length ? (tapDistance = +_, zoom) : tapDistance; }; return zoom; } // src/ui/d3_force_graph_with_labels.ts var import_obsidian5 = require("obsidian"); // src/ui/graph_control.ts var import_obsidian4 = require("obsidian"); var transition2 = "all 100ms cubic-bezier(0.02,0.01,0.47,1)"; var GraphControlCategory = class { constructor(graphControls, id2, header, collapse = true) { this.adjustHeight = (0, import_obsidian4.debounce)( function() { if (!this.iscollapsed()) { let height = 0; for (let setting of this.settings) { height += setting.settingEl.clientHeight; } this.settingsContainer.style("height", height + "px"); } }, 10, true ); this.settings = []; this.graphControls = graphControls; this.section = graphControls.container.append("div").classed( `tree-item graph-control-section mod-${id2} is-collapsed`, true ); let self = this.section.append("div").classed("tree-item-self", true).on("click", this.toggleCollapsed.bind(this)); this.collapsibleIcon = self.append("div").classed("tree-item-icon collapse-icon", true); (0, import_obsidian4.setIcon)(this.collapsibleIcon.node(), "right-triangle"); self.append("div").classed("tree-item-inner", true).append("header").classed("graph-control-section-header", true).text(header); this.settingsContainer = create_default("div").classed("tree-item-children", true).style("height", "0px").style("transition", transition2).style("overflow", "hidden"); if (collapse === false) { this.unfold(); } } iscollapsed() { return this.section.classed("is-collapsed"); } fold() { this.collapsibleIcon.attr("transform", "rotate(-90deg)"); this.section.classed("is-collapsed", true); this.settingsContainer.style("height", "0px").style("padding-top", "0px").style("padding-bottom", "0px"); setTimeout( function() { this.settingsContainer.remove(); }.bind(this), 100 ); } unfold() { this.collapsibleIcon.attr("transform", null); this.section.classed("is-collapsed", false); this.section.node().appendChild(this.settingsContainer.node()); this.settingsContainer.style("padding-top", "4px").style("padding-bottom", "4px"); this.adjustHeight(); } toggleCollapsed(collapsed) { if (collapsed === true) { this.fold(); } else if (collapsed === false) { this.unfold(); } else { if (this.iscollapsed()) this.unfold(); else this.fold(); } } addSetting() { let setting = new import_obsidian4.Setting(this.settingsContainer.node()); this.settings.push(setting); this.adjustHeight(); return setting; } }; var GraphControl = class { isClose() { return this.container.classed("is-close"); } open() { this.container.classed("is-close", false); this.categories.forEach((category) => category.adjustHeight()); } close() { this.container.classed("is-close", true); } toggle() { if (this.isClose()) this.open(); else this.close(); } constructor(containerEl) { this.categories = []; Array.from( containerEl.getElementsByClassName("graph-controls") ).forEach((x2) => containerEl.removeChild(x2)); this.container = create_default("div").classed("graph-controls is-close", true).style("background-color", "var(--graph-control-bg)").style("border", "none"); let closeButton = this.container.append("div").classed("clickable-icon graph-controls-button mod-close", true).attr("aria-lable", "Close").on("click", this.close.bind(this)); (0, import_obsidian4.setIcon)(closeButton.node(), "lucide-x"); let openButton = this.container.append("div").classed("clickable-icon graph-controls-button mod-open", true).attr("aria-lable", "Open graph settings").on("click", this.open.bind(this)); (0, import_obsidian4.setIcon)(openButton.node(), "gear"); containerEl.appendChild(this.container.node()); } addCategory(id2, header, collapse) { let category = new GraphControlCategory(this, id2, header, collapse); this.categories.push(category); return category; } }; // src/ui/d3_force_graph_with_labels.ts async function ForceGraphWithLabels(view, contentEl, nextPath, { graph, getNodes, getLinks }, { nodeId = (d) => d.id, nodeGroup, nodeGroups, nodeTitle, nodeFill = "currentColor", nodeStroke = "#fff", nodeStrokeWidth = 1.5, nodeStrokeOpacity = 1, nodeRadius = 5, nodeStrength = -1500, linkSource = ({ source }) => source, linkTarget = ({ target }) => target, linkStroke = "#999", linkStrokeOpacity = 0.6, linkStrokeWidth = 3, linkStrokeLinecap = "round", linkStrength, colors = Tableau10_default, width = 2e3, height = 2e3, invalidation, nodeTextFill = "currentColor", nodeTextStroke = "black", linkGroups, linkType = ({ type: type2 }) => type2 } = {}) { contentEl.id = Date.now().toString(); let nodes = getNodes(graph), links = getLinks(graph); let nodeIdArray = map(nodes, nodeId).map(intern); let linkSourceArray = map(links, linkSource).map(intern); let linkTargetArray = map(links, linkTarget).map(intern); let linkGroupArray = map(links, linkType).map(intern); if (nodeTitle === void 0) nodeTitle = (_, i) => nodeIdArray[i]; let nodeTitleArray = nodeTitle == null ? null : map(nodes, nodeTitle); let nodeGroupArray = nodeGroup == null ? null : map(nodes, nodeGroup).map(intern); let linkStrokeWidthArray = typeof linkStrokeWidth !== "function" ? null : map(links, linkStrokeWidth); let linkStrokeArray = typeof linkStroke !== "function" ? null : map(links, linkStroke); let existLink = /* @__PURE__ */ new Map(); nodes = nodes.map((d, i) => { return { id: nodeIdArray[i], group: nodeGroup(d) }; }); links = links.map((d, i) => { existLink.set(`${linkSourceArray[i]}|${linkTargetArray[i]}`, true); return { source: linkSourceArray[i], target: linkTargetArray[i], type: linkGroupArray[i] }; }); if (nodeGroupArray && nodeGroups === void 0) nodeGroups = sort(nodeGroupArray); let color2 = nodeGroup == null ? null : ordinal(nodeGroups, colors); const forceNode = manyBody_default(); const forceLink = link_default(links).id(({ index: i }) => nodeIdArray[i]); if (nodeStrength !== void 0) forceNode.strength(nodeStrength); if (linkStrength !== void 0) forceLink.strength(linkStrength); let xCenter = 0, yCenter = 0; const simulation = simulation_default(nodes).force("link", forceLink).force("charge", forceNode).force("x", x_default2(xCenter)).force("y", y_default2(yCenter)); contentEl.setAttribute( "style", "padding: 0px; overflow: hidden; position: relative;" ); const graphContainer = create_default("div").classed("path-finder force-graph", true); width = contentEl.clientWidth; height = contentEl.clientHeight; const svg = graphContainer.append("svg").classed("path-finder path-graph", true).attr("width", width).attr("height", height).attr("viewBox", [-height / 2, -width / 2, height, width]); let defs = svg.append("defs").selectAll("marker").data(linkGroups).join("marker").attr("id", (d) => `arrow-${d}`).attr("viewBox", "0 -5 10 10").attr("refX", 10).attr("refY", -0.5).attr("markerWidth", 6).attr("markerHeight", 6).attr("orient", "auto").append("path").attr("fill", "var(--path-finder-link-stroke,--text-normal)").attr("d", "M0,-5L10,0L0,5"); let link = svg.append("g").attr("fill", "none").selectAll("path").data(links).join("path").classed("path-finder link", true).attr("marker-end", (d) => `url(#arrow-${d.type})`).text("test"); let node = svg.append("g").attr("fill", nodeFill).attr("stroke-linecap", "round").attr("stroke-linejoin", "round").selectAll("g").data(nodes).join("g").classed("path-finder node", true).classed("fixed", (d) => d.fx !== void 0).call(drag(simulation)).on("click", click); node.on("mouseover", setSelection(true)).on( "mouseout", setSelection(false) ); function setSelection(flag) { return function(evt, from) { setNodeClass( node.filter((to) => { let u = from.id, v = to.id; return existLink.get(`${u}|${v}`) || existLink.get(`${v}|${u}`); }), "selected", flag ); setNodeClass( node.filter((to) => { let u = from.id, v = to.id; return !(existLink.get(`${u}|${v}`) || existLink.get(`${v}|${u}`)) && u !== v; }), "unselected", flag ); setNodeClass(select_default2(this), "center", flag); setLinkClass( link.filter((d) => { return d.source.id == from.id || d.target.id == from.id; }), "selected", flag ); setLinkClass( link.filter((d) => { return !(d.source.id == from.id || d.target.id == from.id); }), "unselected", flag ); }; } function setNodeClass(selection2, cls, flag = true) { selection2.classed(cls, flag); selection2.select("circle").classed(cls, flag); selection2.select("text").classed(cls, flag); } function setLinkClass(selection2, cls, flag = true) { selection2.classed(cls, flag); } node.append("circle").classed("path-finder node-circle", true); if (linkStrokeWidthArray) link.attr( "stroke-width", ({ index: i }) => linkStrokeWidthArray[i] ); if (linkStrokeArray) link.attr( "stroke", ({ index: i }) => linkStrokeArray[i] ); if (nodeGroupArray) node.attr( "fill", ({ index: i }) => color2(nodeGroupArray[i]) ); if (nodeTitleArray) node.append("text").attr("x", 0).attr("y", -20).attr("align", "center").text(({ index: i }) => nodeTitleArray[i]).classed("path-finder node-text", true); if (invalidation != null) invalidation.then(() => simulation.stop()); simulation.on("tick", ticked); svg.call( zoom_default2().filter((evt) => { return !evt.ctrlKey && evt.type !== "click" || evt.type === "mousedown"; }).extent([ [-width / 2, -height / 2], [width / 2, height / 2] ]).scaleExtent([0.1, 8]).on("zoom", zoomed) ); ``; function zoomed({ transform: transform2 }) { svg.selectAll("g").attr("transform", transform2); simulation.alpha(1).restart(); } function ticked() { link.attr("d", linkArc); node.attr( "transform", (d) => `translate(${d.x},${d.y})` ); } function linkArc(d) { if (d.type == "monodirectional") { const angle = Math.atan2( d.source.y - d.target.y, d.source.x - d.target.x ); const fromX = d.source.x, fromY = d.source.y; const toX = d.target.x + (nodeRadius + nodeStrokeWidth) * Math.cos(angle), toY = d.target.y + (nodeRadius + nodeStrokeWidth) * Math.sin(angle); return ` M${fromX},${fromY} L${toX},${toY}`; } else { const dis = Math.hypot( d.target.x - d.source.x, d.target.y - d.source.y ); const angle = Math.atan2( d.source.y - d.target.y, d.source.x - d.target.x ); const fromX = d.source.x, fromY = d.source.y; const toX = d.target.x + (nodeRadius + nodeStrokeWidth) * Math.cos(angle), toY = d.target.y + (nodeRadius + nodeStrokeWidth) * Math.sin(angle); return ` M${fromX},${fromY} A${dis},${dis} 0 0,1 ${toX},${toY} `; } } function click(evt, d) { if (select_default2(this).classed("fixed")) { delete d.fx; delete d.fy; select_default2(this).classed("fixed", false); } else { d.fx = d.x; d.fy = d.y; select_default2(this).classed("fixed", true); } } function intern(value) { return value !== null && typeof value === "object" ? value.valueOf() : value; } function clamp(x2, lo, hi) { return x2 < lo ? lo : x2 > hi ? hi : x2; } function drag(simulation2) { function dragstarted(event, d) { select_default2(this).classed("fixed", true); if (!event.active) simulation2.alphaTarget(1).restart(); d.fx = d.x; d.fy = d.y; } function dragged(event, d) { d.fx = clamp(event.x, -Infinity, Infinity); d.fy = clamp(event.y, -Infinity, Infinity); simulation2.alpha(1).restart(); } function dragended(event, d) { if (!event.active) simulation2.alphaTarget(0); } return drag_default().on("start", dragstarted).on("drag", dragged).on("end", dragended); } let panelContainer = create_default("div").classed("path-finder panel-container is-close", true); let panelTitleContainer = panelContainer.append("div").classed("path-finder panel-title", true); let leftButtonDiv = panelTitleContainer.append("div").classed("path-finder panel-button mod-prev", true); let panelTitle = panelTitleContainer.append("p").text("1/1").classed("path-finder panel-title title-text", true); let rightButtonDiv = panelTitleContainer.append("div").classed("path-finder panel-button mod-next", true); let pathContainer = panelContainer.append("div").classed("path-finder panel-display", true); let paths = [], index2 = 0; let calculationComplete = false; getAllPaths(); async function getAllPaths() { for await (let path of nextPath) { paths.push(path); for (let u of path) { if (graph.getID(u) === void 0) graph.addVertice(u); } for (let i = 0; i < path.length - 1; i++) { graph.addEdgeExtended(path[i], path[i + 1], 1); graph.addEdgeExtended(path[i + 1], path[i], 1); } updateGraph(); updatePathContent(); } calculationComplete = true; } view.nextPath = function() { index2++; updatePathContent(); }; view.prevPath = function() { index2--; updatePathContent(); }; leftButtonDiv.on("click", view.prevPath); rightButtonDiv.on("click", view.nextPath); function updateGraph() { let nodes2 = getNodes(graph); let links2 = getLinks(graph); let N = map(nodes2, nodeId).map(intern); let LS = map(links2, linkSource).map(intern); let LT = map(links2, linkTarget).map(intern); let LG = map(links2, linkType).map(intern); if (nodeTitle === void 0) nodeTitle = (_, i) => N[i]; let T = nodeTitle == null ? null : map(nodes2, nodeTitle); let G = nodeGroup == null ? null : map(nodes2, nodeGroup).map(intern); if (G && nodeGroups === void 0) nodeGroups = sort(G); let color3 = nodeGroup == null ? null : ordinal(nodeGroups, colors); nodes2 = map(nodes2, (_, i) => ({ id: N[i], group: nodeGroup(_) })); links2 = map(links2, (_, i) => { existLink.set(`${LS[i]}|${LT[i]}`, true); return { source: LS[i], target: LT[i], type: LG[i] }; }); const old = new Map( node.data().map((d) => [d.id, d]) ); nodes2 = nodes2.map( (d) => Object.assign(old.get(d.id) || {}, d) ); links2 = links2.map((d) => Object.assign({}, d)); node = node.data(nodes2, (d) => d.id).join( (enter) => enter.append("g").call( (enter2) => enter2.append("circle").classed("path-finder node-circle", true) ).call( (enter2) => enter2.append("text").attr("x", 0).attr("y", -20).attr("align", "center").text((d) => nodeTitle(d)).classed("path-finder node-text", true) ).call( (enter2) => enter2.attr("fill", (d) => color3(nodeGroup(d))) ) ).classed("path-finder node", true).classed("fixed", (d) => d.fx !== void 0).call(drag(simulation)).on("click", click).on("mouseover", setSelection(true)).on("mouseout", setSelection(false)); link = link.data(links2, (d) => `${d.source}|${d.target}`).join("path").classed("path-finder link", true).attr("marker-end", (d) => `url(#arrow-${d.type})`); const forceLink2 = link_default(links2).id(({ index: i }) => N[i]); if (linkStrength !== void 0) forceLink2.strength(linkStrength); simulation.nodes(nodes2); simulation.force("link", forceLink2); simulation.alpha(1).restart().tick(); } function updatePathContent() { let pathsLength = paths.length; if (index2 >= pathsLength) { if (calculationComplete) { new import_obsidian5.Notice("No more paths available!"); } else { new import_obsidian5.Notice("Still Calculating!"); } index2 = pathsLength - 1; } if (index2 < 0) index2 = 0; panelTitle.text(`${index2 + 1}/${pathsLength}`); let path = paths[index2]; setNodeClass(node, "center", false); setNodeClass(node, "selected", false); setNodeClass(node, "unselected", false); setLinkClass(link, "center", false); setLinkClass(link, "selected", false); setLinkClass(link, "unselected", false); if (!panelContainer.classed("is-close")) { let nodeMap = /* @__PURE__ */ new Map(); for (let x2 of path) nodeMap.set(x2, true); let linkMap = /* @__PURE__ */ new Map(); for (let i = 0; i < path.length - 1; i++) { linkMap.set(`${path[i]}|${path[i + 1]}`, true); } setSelectedPath(nodeMap, linkMap, true); } panelContainer.on("mouseover", () => { if (!panelContainer.classed("is-close")) { let nodeMap = /* @__PURE__ */ new Map(); for (let x2 of path) nodeMap.set(x2, true); let linkMap = /* @__PURE__ */ new Map(); for (let i = 0; i < path.length - 1; i++) { linkMap.set(`${path[i]}|${path[i + 1]}`, true); } setSelectedPath(nodeMap, linkMap, true); } }).on("mouseout", () => { if (!panelContainer.classed("is-close")) { let nodeMap = /* @__PURE__ */ new Map(); for (let x2 of path) nodeMap.set(x2, true); let linkMap = /* @__PURE__ */ new Map(); for (let i = 0; i < path.length - 1; i++) { linkMap.set(`${path[i]}|${path[i + 1]}`, true); } setSelectedPath(nodeMap, linkMap, false); } }); pathContainer.selectAll("div.path-finder.panel-display.path-item").remove(); pathContainer.selectAll("div.path-finder.panel-display.path-item").data(path).enter().append("div").classed("path-finder panel-display path-item", true).text((d) => nodeTitle({ id: d })).on("mouseover", function(evt, u) { setNodeClass( node.filter((d) => { let v = d.id; return u === v; }), "center", true ); select_default2(this).classed("selected", true); }).on("mouseout", function(evt, u) { setNodeClass( node.filter((d) => { let v = d.id; return u === v; }), "center", false ); select_default2(this).classed("selected", false); }); } function setSelectedPath(nodeMap, linkMap, flag) { setNodeClass( node.filter((d) => { return nodeMap.get(d.id); }), "selected", flag ); setNodeClass( node.filter((d) => { return !nodeMap.get(d.id); }), "unselected", flag ); setLinkClass( link.filter((d) => { return linkMap.get(`${d.source.id}|${d.target.id}`) || linkMap.get(`${d.target.id}|${d.source.id}`); }), "selected", flag ); setLinkClass( link.filter((d) => { return !(linkMap.get(`${d.source.id}|${d.target.id}`) || linkMap.get(`${d.target.id}|${d.source.id}`)); }), "unselected", flag ); } let graphContainerNode = graphContainer.node(); let panelContainerNode = panelContainer.node(); contentEl.appendChild(graphContainerNode); contentEl.appendChild(panelContainerNode); const closeButton = panelContainerNode.createDiv(); closeButton.addClasses(["path-finder", "panel-button", "mod-close"]); (0, import_obsidian5.setIcon)(closeButton, "cross"); closeButton.style.display = "none"; view.closePanel = function() { this.style.display = "none"; panelContainerNode.toggleClass("is-close", true); let path = paths[index2]; let nodeMap = /* @__PURE__ */ new Map(); for (let x2 of path) nodeMap.set(x2, true); let linkMap = /* @__PURE__ */ new Map(); for (let i = 0; i < path.length - 1; i++) { linkMap.set(`${path[i]}|${path[i + 1]}`, true); } setSelectedPath(nodeMap, linkMap, false); }.bind(closeButton); closeButton.onClickEvent(view.closePanel); closeButton.setAttribute("aria-label", "Close"); const openButton = panelContainerNode.createDiv(); openButton.addClasses(["path-finder", "panel-button", "mod-open"]); (0, import_obsidian5.setIcon)(openButton, "right-triangle"); view.openPanel = function() { panelContainerNode.toggleClass("is-close", false); closeButton.style.display = "flex"; }; openButton.onClickEvent(view.openPanel); openButton.setAttribute("aria-label", "Open"); panelContainerNode.addEventListener("mouseenter", function(evt) { if (!this.hasClass("is-close")) closeButton.style.display = "flex"; }); panelContainerNode.addEventListener("mouseleave", function(evt) { if (!this.hasClass("is-close")) closeButton.style.display = "none"; }); const leftButtonContainer = leftButtonDiv.node(); (0, import_obsidian5.setIcon)(leftButtonContainer, "left-arrow"); const rightButtonContainer = rightButtonDiv.node(); (0, import_obsidian5.setIcon)(rightButtonContainer, "right-arrow"); let graphControls = new GraphControl(contentEl); let forcesCategory = graphControls.addCategory("forces", "Forces", false); addRepelForceSetting(); function addRepelForceSetting() { let setting = forcesCategory.addSetting(); setting.setName("Repel force").addSlider((slider) => { slider.setLimits(-2e3, -500, 10).setValue(-1500).setDynamicTooltip().onChange((value) => { nodeStrength = value; forceNode.strength(nodeStrength); simulation.force("charge", forceNode); simulation.alpha(1).restart().tick(); }); }).settingEl.addClass("mod-slider"); } addLinkForceSetting(); function addLinkForceSetting() { let setting = forcesCategory.addSetting(); setting.setName("Link force").addSlider((slider) => { slider.setLimits(-1e3, 0, 10).setValue(-400).setDynamicTooltip().onChange((value) => { linkStrength = value; forceLink.strength(linkStrength); simulation.force("link", forceLink); simulation.alpha(1).restart().tick(); }); }).settingEl.addClass("mod-slider"); } addXForceSetting(); function addXForceSetting() { let setting = forcesCategory.addSetting(); setting.setName("X force").addToggle((toggle) => { toggle.setValue(true).onChange((on) => { if (on) { simulation.force("x", x_default2(xCenter)); } else { simulation.force("x", null); } simulation.alpha(1).restart().tick(); }); }).settingEl.addClass("mod-toggle"); } addXForceCenterSetting(); function addXForceCenterSetting() { forcesCategory.addSetting().setName("X force center").addText((text) => { 1; text.setValue("0").onChange((value) => { if (value === "") { text.setValue("0"); value = "0"; } xCenter = Number.parseInt(value); if (isNaN(xCenter)) { new import_obsidian5.Notice( `Illegal X force center: ${value} is not a number.` ); return; } if (simulation.force("x")) { simulation.force("x", x_default2(xCenter)); simulation.alpha(1).restart().tick(); } }); }); } addYForceSetting(); function addYForceSetting() { let setting = forcesCategory.addSetting(); setting.setName("Y force").addToggle((toggle) => { toggle.setValue(true).onChange((on) => { if (on) { 1; simulation.force("y", y_default2(yCenter)); } else { simulation.force("y", null); } simulation.alpha(1).restart().tick(); }); }).settingEl.addClass("mod-toggle"); } addYForceCenterSetting(); function addYForceCenterSetting() { let setting = forcesCategory.addSetting().setName("Y force center"); setting.addText((text) => { text.setValue("0").onChange((value) => { if (value === "") { text.setValue("0"); value = "0"; } yCenter = Number.parseInt(value); if (isNaN(yCenter)) { new import_obsidian5.Notice( `Illegal Y force center: ${value} is not a number.` ); return; } if (simulation.force("y")) { simulation.force("y", y_default2(yCenter)); simulation.alpha(1).restart().tick(); } }); }); } } // src/view.ts var VIEW_TYPE_PATHGRAPHVIEW = "path-graph-view"; var VIEW_TYPE_PATHVIEW = "path-view"; var PathGraphView = class extends import_obsidian6.ItemView { constructor(leaf) { super(leaf); } getViewType() { return VIEW_TYPE_PATHGRAPHVIEW; } getDisplayText() { return "Path Graph View"; } onResize() { const { contentEl } = this; const svg = contentEl.getElementsByClassName( "path-finder path-graph" )[0]; let width = contentEl.clientWidth, height = contentEl.clientHeight; svg.setAttribute( "viewBox", `${-height / 2},${-width / 2},${height},${width}` ); svg.setAttribute("width", width.toString()); svg.setAttribute("height", height.toString()); } getNodes(graph) { let ret = []; for (let i = 1; i <= graph.getNodeCount(); i++) { ret.push({ id: graph.getName(i), group: i === this.source ? "source" : i === this.target ? "target" : "node" }); } return ret; } getLinks(graph) { let ret = []; for (let i = 1; i <= graph.getEdgeCount(); i++) { let fromFilePath = graph.getName(graph.edges[i].source), toFilePath = graph.getName(graph.edges[i].target); if (!fromFilePath || !toFilePath) continue; let resolvedLinks = app.metadataCache.resolvedLinks; if (resolvedLinks[fromFilePath][toFilePath]) { let tmp = { source: fromFilePath, target: toFilePath, type: resolvedLinks[toFilePath][fromFilePath] ? "bidirectional" : "monodirectional" }; ret.push(tmp); } } return ret; } setData(from, to, length, graph) { const contentEl = this.contentEl; contentEl.empty(); let newGraph = new WeightedGraphWithNodeID(); newGraph.addVertice(from); newGraph.addVertice(to); let source = newGraph.getID(from); let target = newGraph.getID(to); this.source = source; this.target = target; ForceGraphWithLabels( this, contentEl, getNextPath(graph.getID(from), graph.getID(to), length, graph), { graph: newGraph, getNodes: this.getNodes.bind(this), getLinks: this.getLinks.bind(this) }, { nodeGroup: (x2) => { return x2.group; }, nodeGroups: ["source", "target", "node"], colors: ["#227d51", "#cb1b45", "#0b1013"], nodeRadius: 10, linkGroups: ["monodirectional", "bidirectional"], nodeTitle: (x2) => { let file = app.vault.getAbstractFileByPath(x2.id); if (!file) return "undefined"; else if (file instanceof import_obsidian6.TFile) { if (file.extension == "md") return file.basename; else { return file.name; } } else { return file.name; } } } ); } nextPath() { } prevPath() { } openPanel() { } closePanel() { } async onOpen() { const contentEl = this.contentEl; contentEl.empty(); } async onClose() { } }; var PathView = class extends import_obsidian6.ItemView { constructor(leaf) { super(leaf); } getViewType() { return VIEW_TYPE_PATHVIEW; } getDisplayText() { return "Path view"; } async setData(source, target, length, graph) { this.source = source; this.target = target; this.nextPath = getNextPath(source, target, length, graph); this.currentPage = 0; let x2 = await this.nextPath.next(); if (!x2.value) { console.log("Path Finder: Error: No return from getNext!"); return; } this.paths = [x2.value]; this.refresh(); } update(pathTitleContainer, pathContentContainer) { pathTitleContainer.empty(); pathContentContainer.empty(); pathTitleContainer.createEl("h1", { text: `${this.currentPage + 1}/${this.paths.length}` }); if (this.currentPage >= this.paths.length) return; for (let x2 of this.paths[this.currentPage]) { let file = app.vault.getAbstractFileByPath(x2); if (file === null) continue; let pathItemContainer = pathContentContainer.createDiv({ cls: ["path-finder", "panel-display", "path-item"] }); pathItemContainer.createEl("h3", { text: file instanceof import_obsidian6.TFile ? file.basename : file.name }); pathItemContainer.createEl("p", { text: file.path }); } } refresh() { this.currentPage = 0; const container = this.containerEl.children[1]; container.empty(); container.setAttribute("style", "padding: 0px"); const leftButtonContainer = container.createDiv({ cls: ["path-finder", "left-button-container"] }); const pathContainer = container.createDiv({ cls: ["path-finder", "path-container"] }); const pathTitleContainer = pathContainer.createDiv({ cls: ["path-finder", "path-container", "title-container"] }); const pathContentContainer = pathContainer.createDiv({ cls: ["path-finder", "path-container", "content-container"] }); const rightButtonContainer = container.createDiv({ cls: ["path-finder", "right-button-container"] }); this.update(pathTitleContainer, pathContentContainer); const leftButton = leftButtonContainer.createEl("button", { cls: ["path-finder", "left-button-container", "left-button"] }); (0, import_obsidian6.setIcon)(leftButton, "left-arrow"); leftButton.onClickEvent(() => { if (this.currentPage > 0) { this.currentPage--; } this.update(pathTitleContainer, pathContentContainer); }); const rightButton = rightButtonContainer.createEl("button", { cls: ["path-finder", "right-button-container", "right-button"] }); (0, import_obsidian6.setIcon)(rightButton, "right-arrow"); rightButton.onClickEvent(async () => { if (this.currentPage < this.paths.length - 1) { this.currentPage++; } else { let res = await this.nextPath.next(); if (res.value) { this.paths.push(res.value); this.currentPage++; } else { new import_obsidian6.Notice("No more Paths!"); } } this.update(pathTitleContainer, pathContentContainer); }); } async onOpen() { const container = this.containerEl.children[1]; container.empty(); } async onClose() { } }; // src/settings.ts var import_obsidian7 = require("obsidian"); function isFiltered(filter2, x2) { if (filter2.regexp == "") return false; return filter2.mode == "Exclude" && RegExp(filter2.regexp).test(x2) || filter2.mode == "Include" && !RegExp(filter2.regexp).test(x2); } function formatHotkey(hotkey) { if (isBlank(hotkey)) { return "Blank"; } function isBlank(hotkey2) { return !hotkey2 || (!hotkey2.modifiers || hotkey2.modifiers.length == 0) && !hotkey2.key; } return formatHotkey2(hotkey); function formatHotkey2(hotkey2) { hotkey2.modifiers.sort(); let result = hotkey2.modifiers.join(" + "); if (hotkey2.key) { if (result != "") { result += " + "; } if (hotkey2.key.length == 1) result += hotkey2.key.toUpperCase(); else result += hotkey2.key; } result = replaceArrow(result); result = replaceModifiers(result); return result; function replaceArrow(result2) { return result2.replaceAll("ArrowLeft", "\u2190").replaceAll("ArrowRight", "\u2192").replaceAll("ArrowUp", "\u2191").replaceAll("ArrowDown", "\u2193"); } function replaceModifiers(result2) { if (import_obsidian7.Platform.isMacOS) { return result2.replaceAll("Meta", "\u2318Command").replaceAll("Alt", "\u2325Option"); } else { return result2.replaceAll("Meta", "\u229EWindows"); } } } } var DEFAULT_SETTINGS = { nextPathHotkey: { modifiers: [], key: "ArrowRight" }, prevPathHotkey: { modifiers: [], key: "ArrowLeft" }, openPanelHotkey: { modifiers: [], key: "o" }, closePanelHotkey: { modifiers: [], key: "w" }, filter: { regexp: "", mode: "Exclude" } }; var PathFinderPluginSettingTab = class extends import_obsidian7.PluginSettingTab { constructor(app2, plugin) { super(app2, plugin); this.plugin = plugin; } addHotkeySetting(title, target, defaultHotkey) { let { containerEl } = this; let hotkeyButton; new import_obsidian7.Setting(containerEl).setName(title).addButton((button) => { hotkeyButton = button; button.setButtonText(formatHotkey(target)).setTooltip("Customize hotkey").onClick(async () => { let controller = new AbortController(); button.setCta(); let blankHotkey = { modifiers: [], key: "" }; let hotkey = { modifiers: [], key: "" }; global.addEventListener( "keydown", async (evt) => { let { modifiers } = hotkey; if (evt.key == "Escape") { button.setButtonText("Blank"); Object.assign(target, blankHotkey); await this.plugin.saveSettings(); button.removeCta(); controller.abort(); evt.stopImmediatePropagation(); return; } if (evt.ctrlKey) { if (evt.key == "Control") { Object.assign(hotkey, blankHotkey); return; } if (!modifiers.includes("Ctrl")) modifiers.push("Ctrl"); } if (evt.shiftKey) { if (evt.key == "Shift") { Object.assign(hotkey, blankHotkey); return; } if (!modifiers.includes("Shift")) modifiers.push("Shift"); } if (evt.altKey) { if (evt.key == "Alt") { Object.assign(hotkey, blankHotkey); return; } if (!modifiers.includes("Alt")) modifiers.push("Alt"); } if (evt.metaKey) { if (evt.key == "Meta") { Object.assign(hotkey, blankHotkey); return; } if (!modifiers.includes("Meta")) modifiers.push("Meta"); } hotkey.key = evt.key; button.setButtonText(formatHotkey(hotkey)); Object.assign(target, hotkey); await this.plugin.saveSettings(); button.removeCta(); controller.abort(); }, { capture: true, signal: controller.signal } ); }); }).addButton((button) => { button.setIcon("reset").setTooltip("Restore default").onClick(async () => { if (defaultHotkey) Object.assign(target, defaultHotkey); else Object.assign(target, { modifiers: [], key: "" }); hotkeyButton.setButtonText(formatHotkey(target)); await this.plugin.saveSettings(); }); }); } display() { let { containerEl } = this; let { settings } = this.plugin; containerEl.empty(); containerEl.createEl("h1", { text: "Hotkey Settings" }); this.addHotkeySetting( "Previous Path", settings.prevPathHotkey, DEFAULT_SETTINGS.prevPathHotkey ); this.addHotkeySetting( "Next Path", settings.nextPathHotkey, DEFAULT_SETTINGS.nextPathHotkey ); this.addHotkeySetting( "Open Panel", settings.openPanelHotkey, DEFAULT_SETTINGS.openPanelHotkey ); this.addHotkeySetting( "Close Panel", settings.closePanelHotkey, DEFAULT_SETTINGS.closePanelHotkey ); new import_obsidian7.Setting(containerEl).setName("Filter").setDesc( (0, import_obsidian7.sanitizeHTMLToDom)( `Write plain text or regex.
The filter string will be matched everywhere in the file path(from vault root to file).
Regex Tutorial` ) ).addText((text) => { text.setValue(settings.filter.regexp).onChange((regexp) => { settings.filter.regexp = regexp; }); }); new import_obsidian7.Setting(containerEl).setName("Filter Mode").addDropdown((dropdown) => { dropdown.addOption("Include", "Include").addOption("Exclude", "Exclude").setValue(settings.filter.mode).onChange((mode) => { settings.filter.mode = mode; }); }); } }; // src/main.ts var import_posix = require("path/posix"); var PathFinderPlugin = class extends import_obsidian8.Plugin { async onload() { console.log("Loading Path Finder plugin"); await this.loadSettings(); this.addSettingTab(new PathFinderPluginSettingTab(this.app, this)); this.addCommand({ id: "find-shortest-path", name: "Find Shortest Path", callback: () => { new PathsModal( this.app, this.findPaths.bind(this, "shortest_path"), Object.assign({}, this.settings.filter), "shortest_path" ).open(); } }); this.addCommand({ id: "find-all-paths-as-graph", name: "Find All Path As Graph", callback: () => { new PathsModal( this.app, this.findPaths.bind(this, "all_paths_as_graph"), Object.assign({}, this.settings.filter), "all_paths_as_graph" ).open(); } }); this.addCommand({ id: "find-all-paths", name: "Find All Path", callback: () => { new PathsModal( this.app, this.findPaths.bind(this, "all_paths"), Object.assign({}, this.settings.filter), "all_paths" ).open(); } }); this.registerView( VIEW_TYPE_PATHGRAPHVIEW, (leaf) => new PathGraphView(leaf) ); this.registerView(VIEW_TYPE_PATHVIEW, (leaf) => new PathView(leaf)); this.registerDomEvent(document, "keydown", (evt) => { let activeView = app.workspace.getActiveViewOfType(PathGraphView); if (!activeView) return; const { settings } = this; if (this.isKey(evt, settings.prevPathHotkey)) activeView.prevPath(); if (this.isKey(evt, settings.nextPathHotkey)) activeView.nextPath(); if (this.isKey(evt, settings.openPanelHotkey)) activeView.openPanel(); if (this.isKey(evt, settings.closePanelHotkey)) activeView.closePanel(); }); } async onunload() { this.app.workspace.detachLeavesOfType(VIEW_TYPE_PATHGRAPHVIEW); this.app.workspace.detachLeavesOfType(VIEW_TYPE_PATHVIEW); await this.saveSettings(); } async loadSettings() { this.settings = Object.assign( {}, DEFAULT_SETTINGS, await this.loadData() ); } async saveSettings() { await this.saveData(this.settings); } isKey(evt, hotkey) { if (evt.ctrlKey != hotkey.modifiers.includes("Ctrl")) return false; if (evt.shiftKey != hotkey.modifiers.includes("Shift")) return false; if (evt.altKey != hotkey.modifiers.includes("Alt")) return false; if (evt.metaKey != hotkey.modifiers.includes("Meta")) return false; if (evt.key != hotkey.key) return false; return true; } findPaths(operation, filter2, from, to, length) { from = (0, import_obsidian8.normalizePath)(from); to = (0, import_obsidian8.normalizePath)(to); let { vault } = app; if (vault.getAbstractFileByPath(from) === null) { new import_obsidian8.Notice(`${from} does not exist.`); return; } if (vault.getAbstractFileByPath(to) === null) { new import_obsidian8.Notice(`${to} does not exist.`); return; } let graph = this.buildGraphFromLinks(filter2); let source = graph.getID(from); let target = graph.getID(to); if (source === void 0) { new import_obsidian8.Notice(`${from} does not exist or is filtered out!`); return; } if (target === void 0) { new import_obsidian8.Notice(`${to} does not exist or is filtered out!`); return; } let { dis } = dijkstra(source, graph); if (from === to) { new import_obsidian8.Notice(`${from} and ${to} are the same file!`); return; } if (dis[target] === Infinity) { new import_obsidian8.Notice(`${from} has no path that lead to ${to}.`); return; } if (operation == "shortest_path") { this.openPathGraphView(from, to, dis[target], graph); } else if (operation == "all_paths_as_graph") { this.openPathGraphView(from, to, length, graph); } else if (operation == "all_paths") { this.openPathView(from, to, length, graph); } } buildGraphFromLinks(filter2) { let graph = new WeightedGraphWithNodeID(); let { resolvedLinks } = app.metadataCache; for (let fromFilePath in resolvedLinks) { if (isFiltered(filter2, fromFilePath)) continue; for (let toFilePath in resolvedLinks[fromFilePath]) { if (isFiltered(filter2, toFilePath)) continue; graph.addEdgeExtended(fromFilePath, toFilePath, 1); graph.addEdgeExtended(toFilePath, fromFilePath, 1); } } return graph; } async openPathGraphView(from, to, length, graph) { let { workspace } = app; let pathGraphViewLeaf = workspace.getLeaf(true); pathGraphViewLeaf.getDisplayText = function() { return `${(0, import_posix.basename)(from, (0, import_posix.extname)(from))}->${(0, import_posix.basename)( to, (0, import_posix.extname)(to) )}${length == Infinity ? "" : ` within ${length} steps`}`; }; await pathGraphViewLeaf.setViewState({ type: VIEW_TYPE_PATHGRAPHVIEW, active: true }); let pathGraphView = pathGraphViewLeaf.view; if (!(pathGraphView instanceof PathGraphView)) { new import_obsidian8.Notice("Failed to open Path View. Please try again."); pathGraphViewLeaf.detach(); return; } pathGraphView.setData(from, to, length, graph); this.app.workspace.revealLeaf(pathGraphViewLeaf); } async openPathView(from, to, length, graph) { let source = graph.getID(from), target = graph.getID(to); if (source === void 0) { new import_obsidian8.Notice(`${from} does note exist!`); return; } if (target === void 0) { new import_obsidian8.Notice(`${to} does note exist!`); return; } let { workspace } = app; let pathViewLeaf = workspace.getLeaf(true); pathViewLeaf.getDisplayText = function() { return `${(0, import_posix.basename)(from, (0, import_posix.extname)(from))}->${(0, import_posix.basename)( to, (0, import_posix.extname)(to) )}${length == Infinity ? "" : ` within ${length} steps`}`; }; await pathViewLeaf.setViewState({ type: VIEW_TYPE_PATHVIEW, active: true }); let pathView = pathViewLeaf.view; if (!(pathView instanceof PathView)) { new import_obsidian8.Notice("Failed to open Path View. Please try again."); pathViewLeaf.detach(); return; } pathView.setData(source, target, length, graph); this.app.workspace.revealLeaf(pathViewLeaf); } };